Я автоматически вставляю изображение в ячейку таблицы документа MS Word.Однако .. Мне нужно автоматически масштабировать изображение (без потери dpi), чтобы соответствовать ячейке таблицы.Есть 2 ячейки таблицы, и они обе должны занимать 50% от выделенной ширины таблицы.Итак ... как вы можете видеть ... изображение не масштабируется, чтобы соответствовать ячейке таблицы.И ширина ячеек не равна.В основном изображения должны быть размещены в 2 столбца с пустой строкой после каждой строки изображения.Для каждого 6-го изображения вставляется новая страница с новой таблицей.Я выкладываю изображение и код
public void InsertTable()
{
List<string> pics = AmendPictures();
Microsoft.Office.Interop.Word._Document WordDoc = null;
Microsoft.Office.Interop.Word._Application axWord = null;
Microsoft.Office.Interop.Word.Table axTable = null;
try
{
axWord = new Microsoft.Office.Interop.Word.Application();
axWord.Visible = true;
object oMissing = System.Reflection.Missing.Value;
WordDoc = axWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
// This is For Header columns
object missing = System.Reflection.Missing.Value;
int totalRows = (pics.Count % 2 == 0) ? pics.Count : (pics.Count + 1);
int rowsPerTable = 6;
int numberOfPages = Convert.ToInt32(Math.Round(Convert.ToDouble(totalRows/6)));
int pageBreakCounter = 1;
int y = 1;
for (int x = 0; x < pics.Count; x += 2)
{
if (((x % rowsPerTable) == 0) || (x ==0))
{
axWord.Selection.GoTo(WdGoToItem.wdGoToLine, WdGoToDirection.wdGoToLast, oMissing, oMissing);
axTable = WordDoc.Tables.Add(axWord.Selection.Range, rowsPerTable, 2);
axTable.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
axTable.PreferredWidth = 100;
axTable.AutoFitBehavior(WdAutoFitBehavior.wdAutoFitWindow);
axTable.Range.Rows.Alignment = WdRowAlignment.wdAlignRowCenter;
axTable.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
axTable.Range.ParagraphFormat.SpaceAfter = 0;
axTable.Range.ParagraphFormat.SpaceBefore = 0;
// Show Borders
axTable.Range.Columns.Borders.Enable = 1;
axTable.Columns[1].PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
axTable.Columns[1].SetWidth(50, WdRulerStyle.wdAdjustNone);
axTable.Columns[2].PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
axTable.Columns[2].SetWidth(50, WdRulerStyle.wdAdjustNone);
}
InlineShape inline_shape = null;
InlineShape inline_shape2 = null;
Range rngPic1 = axTable.Cell((x+1) % 6, 1).Range;
rngPic1.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
inline_shape = rngPic1.InlineShapes.AddPicture(pics.ElementAt(x).ToString(), ref missing, ref missing, ref missing);
if (inline_shape != null)
{
Shape shape = inline_shape.ConvertToShape();
shape.WrapFormat.Type = WdWrapType.wdWrapInline;
}
if ((x + 1) < pics.Count)
{
Range rngPic2 = axTable.Cell((x + 1) % 6, 2).Range;
rngPic2.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;
inline_shape2 = rngPic2.InlineShapes.AddPicture(pics.ElementAt(x+1).ToString(), ref missing, ref missing, ref missing);
if (inline_shape2 != null)
{
Shape shape = inline_shape2.ConvertToShape();
shape.WrapFormat.Type = WdWrapType.wdWrapInline;
}
}
pageBreakCounter++;
y = y + 2;
if ((x % rowsPerTable) == 0)
{
axWord.Selection.GoTo(WdGoToItem.wdGoToLine, WdGoToDirection.wdGoToLast, oMissing, oMissing);
axWord.Selection.InsertNewPage();
y = 0;
}
}
WordDoc.Content.Font.Size = 12;
WordDoc.Content.Font.Name = "Calibri";
Microsoft.Office.Interop.Word.Dialog dialog = axWord.Dialogs[Microsoft.Office.Interop.Word.WdWordDialog.wdDialogFileSaveAs];
dialog.Show(ref oMissing);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " " + ex.InnerException);
}
finally
{
if (axTable != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(axTable);
// Release all Interop objects.
}
if (WordDoc != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(WordDoc);
}
if (axWord != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(axWord);
}
WordDoc = null;
axWord = null;
GC.Collect();
}
}