2

こんにちは、いくつかの図の PDF ドキュメントを作成するために PDFSharp を使用しています。ダイアグラムを PDF に変換した後、非常に小さいダイアグラムの場合は 1 ページに印刷する必要がありますが、大きなダイアグラムがある場合、1 ページに印刷すると印刷品質が低下し、ダイアグラムが小さく表示され、ダイアグラムの内容が読めなくなります。 . 高いスケールを指定すると、ダイアグラムは大きく表示されますが、ノードの一部が消えます。

Scale と Diagram-Size に依存するページをさらに作成するにはどうすればよいですか?

private void convertBitmap(BitmapSource Img)
{
  try
  {
     PdfSharp.Pdf.PdfDocument document = new PdfSharp.Pdf.PdfDocument();
     document.Info.Title = activeDiagram.Model.Name;
     PdfSharp.Pdf.PdfPage pdfPage = document.AddPage();
     XGraphics gfx = XGraphics.FromPdfPage(pdfPage);
     XImage xIMage = XImage.FromBitmapSource(Img);
     XImage logo = XImage.FromFile("logo.png");
     pdfPage.Width = xIMage.PointWidth;
     pdfPage.Height = xIMage.PointHeight;
     //draw the logo
     gfx.DrawImage(xIMage, 15, 70, pdfPage.Width, pdfPage.Height);
     gfx.DrawImage(logo, 500, 5);
     // Draw the texts
     string typ = "";
     if (activeDiagram == myDiagram1)
         typ = "EPC";

     XFont font = new XFont("Arial", 12, XFontStyle.Bold);
     XFont font2 = new XFont("Arial", 10, XFontStyle.Bold);
     gfx.DrawString("Modelname: " + activeDiagram.Model.Name, font, XBrushes.Black, 
                     new XRect(50, 5, 400, 20), XStringFormats.TopLeft);
    gfx.DrawString("Modeltyp: " + typ, font, XBrushes.Black, new XRect(50, 25, 400, 
                    20), XStringFormats.TopLeft);
    gfx.DrawLine(new XPen(XColor.FromKnownColor(XKnownColor.CornflowerBlue), 2), 20, 
                    45, 600, 45);

   gfx.DrawLine(new XPen(XColor.FromKnownColor(XKnownColor.CornflowerBlue), 2), 20, 
                    900, 600, 900);
   gfx.DrawString("Date: " + DateTime.Now.ToShortDateString(), font2, XBrushes.Black, 
                    new XRect(50, 905, 100, 25), XStringFormats.TopLeft);
   gfx.DrawString("Page: 1 von 1 ", font2, XBrushes.Black, new XRect(530, 905, 100, 
                25), XStringFormats.TopLeft);

    SaveFileDialog dlg = new SaveFileDialog();
    lg.FileName = activeDiagram.Model.Name;
    dlg.AddExtension = true;
    dlg.DefaultExt = "pdf";
    dlg.Filter = "PDF Document|*.pdf|*.pdf|";
    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
                // Save the document...
                string filename = dlg.FileName;
                document.Save(filename);
                // ...and start a viewer.
                Process.Start(filename);
            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, "Error saving graph as a 
             pdf");
        }
    }
4

1 に答える 1

2

PDFsharp を使用して複数のページを作成するのは簡単ですが、PDFsharp はビットマップを複数のページに配布する準備ができていないため、このタスクはユーザーに任されています。

ビットマップのサイズに応じて、イメージを 2 つまたは 4 つの部分に分割し、それらを 2 つまたは 4 つのページに描画することをコードで決定する必要があります。この方法では、プリンター ドライバーの機能に依存する必要はありません。

PDFsharp はより大きなページを作成できますが、1 つの PDF ページを複数の物理ページに印刷するには、プリンター ドライバーの機能に頼る必要があります。それはうまくいかないかもしれません。

画像を自分で分割すると、出力される PDF ファイルを完全に制御できます。2 つまたは 4 つのセグメントを共通の (重複する) ストリップで印刷することをお勧めします。

于 2012-08-27T16:22:22.017 に答える