将图像导出为PDF

5

我有一个项目需要将图像导出为PDF。需要同时将文本和图片导出到pdf中。是否可以使用silverPDF.dll和PdfReader实现?

代码如下:

 private void btnOutlook_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        XBrush xbrush;
        SaveFileDialog savePDF = new SaveFileDialog();
        savePDF.Filter = "PDF file format | *.pdf";
        if (savePDF.ShowDialog() == true)
        {
            PdfDocument document = new PdfDocument();
            PdfPage page = document.AddPage();
            XGraphics gfx = XGraphics.FromPdfPage(page);
            XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);

            XFont font = new XFont("Huxtable", 20, XFontStyle.Bold, options);

            for (int x = 0; x < 10; x++)
            {
                if (x % 2 == 0)
                {
                    xbrush = XBrushes.Red;
                }
                else
                    xbrush = XBrushes.Black;
                gfx.DrawString(string.Format("{0}", stringArray[x]), font, xbrush, new XRect(0, (x * 20), page.Width, page.Height), XStringFormats.TopLeft);
            }

            document.Save(savePDF.OpenFile());
        }

    }

在这段代码中,我该在哪里插入一张图片并将其插入到PDF文件中?有什么办法吗?感谢所有回复。


我不知道关于SilverPDF的任何内容,但是有一些在线教程使用其他实用类。 这里是其中之一。 - M.Babcock
2个回答

1

我无法使用它们,因为它们没有针对Silverlight运行时构建。这对我来说是一个巨大的问题。 - Nathan
1
我现在正在使用它们。我刚刚在 .Web 应用程序中创建了项目,然后将其传递给 Silverlight 应用程序以进行保存。感谢您的帮助! - Nathan

0

Tesseract 4.1.1,使用C#将图像转换为PDF全文

这是一种使用Tesseract 4.1.1从Nugget包中构建带有完整文本层的PDF的方法,只需在Visual Studio 2022和DotNet 6中使用。

以下是从多个jpg创建PDF的函数。

  1. jpg文件的命名必须按照以下结构:IMG1.jpg,IMG2.jpg,IMG3.jpg,...
  2. 所有图像文件都存储在同一个文件夹中

private void PDFRenderer_OCR_MutipleJPG(String PDFName, String PDFTitle, String FolderJpg, int NumberImage)
  {
     IResultRenderer renderer = Tesseract.PdfResultRenderer.CreatePdfRenderer(PDFName, "tessdata", false);
     renderer.BeginDocument(PDFTitle);
     string configurationFilePath = "tessdata";
     string configfile = Path.Combine("tessdata", "pdf");
     //using (TesseractEngine engine = new TesseractEngine(configurationFilePath, "eng", EngineMode.TesseractAndLstm, configfile))
     EngineMode M1 = EngineMode.TesseractOnly;//election OCR mode
     TesseractEngine engine = new TesseractEngine("tessdata", "eng", M1);
     // progressBar1.Maximum= NumberImage;
     // progressBar1.Minimum = 1;   
          for (i =1 ; i < NumberImage+1;i++)//i=1, because my first image name is img1.jpg
            {
               //progressBar1.Value= i+1;
                lPage.Text = "Processing page: " + i.ToString();
                lPage.Refresh();       
                TesseractEngine engine = new TesseractEngine("tessdata", "eng", M1);
                string ImageJpg = "c:\\temp" + "\\" + FolderJpg + "\\" + FolderJpg + i.ToString() + ".jpg";
               // MessageBox.Show("IMG: " + ImageJpg);      
                using (var imagefile = new Bitmap(ImageJpg))
                 {
                    using (var img = PixConverter.ToPix(imagefile))
                    {
                        using (Tesseract.Page page = engine.Process(img, PDFTitle))
                        {
                            renderer.AddPage(page); // Adding converted page 
                        }
                    }                  
                }      
            }
            renderer.Dispose(); // Clear ressourcce
            //Reset progressBar1 to origin setting
            //progressBar1.Value= 1;
            //progressBar1.Maximum = 100;
            //progressBar1.Minimum= 0;
            //progressBar1.Value = 0;
  }

只需像这样调用此方法:

PDFRenderer_OCR_MutipleJPG("C:\temp\outp","tilte","Document", 20);

  • "C:\temp\outp" -> 最终pdf的名称和路径,不包括扩展名,它将是"C:\temp\outp.pdf"。

  • Title= PDF上的"标题"元信息

  • Document -> 是我的图像文件夹源和每个图像名称的一部分(不包括索引)。

  • 这里要转换的图像文件夹是: C:\temp\document\ -> 内部:-> Document1.jpg, Document2.jpg, Document3.jpg, ...

  • 20是索引,表示要转换的图像数量。

  • 可选进度条,以在处理过程中查看页面编号的UI

最好的问候 来自法国的Francis


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接