Я хотел бы преобразовать изображение (например, jpg или png) в PDF.
Я проверил ImageMagickNET, но он слишком сложен для моих нужд.
Какие другие решения или код .NET существуют для преобразования изображения в PDF?
Я хотел бы преобразовать изображение (например, jpg или png) в PDF.
Я проверил ImageMagickNET, но он слишком сложен для моих нужд.
Какие другие решения или код .NET существуют для преобразования изображения в PDF?
iTextSharp делает это довольно чисто и имеет открытый исходный код. Кроме того, у него есть очень хорошая сопроводительная книга автора который я рекомендую, если вы в конечном итоге будете заниматься более интересными вещами, такими как управление формами. Для обычного использования в списках рассылки и группах новостей есть множество ресурсов для примеров того, как делать обычные вещи.
РЕДАКТИРОВАТЬ: как указано в комментарии @Chirag, Ответ @Darin содержит код, который определенно компилируется с текущими версиями.
Пример использования:
public static void ImagesToPdf(string[] imagepaths, string pdfpath)
{
using(var doc = new iTextSharp.text.Document())
{
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(pdfpath, FileMode.Create));
doc.Open();
foreach (var item in imagepaths)
{
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(item);
doc.Add(image);
}
}
}
забастовка>
using
. Подождите, взгляните на @Darin answer. Спасибо за указание на одежду Императора :)
- person Ruben Bartelink; 10.10.2015
Легко с iTextSharp:
class Program
{
static void Main(string[] args)
{
Document document = new Document();
using (var stream = new FileStream("test.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfWriter.GetInstance(document, stream);
document.Open();
using (var imageStream = new FileStream("test.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var image = Image.GetInstance(imageStream);
document.Add(image);
}
document.Close();
}
}
}
Другой рабочий код, попробуйте
public void ImagesToPdf(string[] imagepaths, string pdfpath)
{
iTextSharp.text.Rectangle pageSize = null;
using (var srcImage = new Bitmap(imagepaths[0].ToString()))
{
pageSize = new iTextSharp.text.Rectangle(0, 0, srcImage.Width, srcImage.Height);
}
using (var ms = new MemoryStream())
{
var document = new iTextSharp.text.Document(pageSize, 0, 0, 0, 0);
iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms).SetFullCompression();
document.Open();
var image = iTextSharp.text.Image.GetInstance(imagepaths[0].ToString());
document.Add(image);
document.Close();
File.WriteAllBytes(pdfpath+"cheque.pdf", ms.ToArray());
}
}
Нам очень повезло с PDFSharp (мы используем его для преобразования TIFF и Text в PDF для сотен медицинских заявлений каждый день).
Такую задачу легко решить с помощью библиотеки Docotic.Pdf.
Вот пример, который создает PDF из заданных изображений (на самом деле не только JPG):
public static void imagesToPdf(string[] images, string pdfName)
{
using (PdfDocument pdf = new PdfDocument())
{
for (int i = 0; i < images.Length; i++)
{
if (i > 0)
pdf.AddPage();
PdfPage page = pdf.Pages[i];
string imagePath = images[i];
PdfImage pdfImage = pdf.AddImage(imagePath);
page.Width = pdfImage.Width;
page.Height = pdfImage.Height;
page.Canvas.DrawImage(pdfImage, 0, 0);
}
pdf.Save(pdfName);
}
}
Отказ от ответственности: я работаю на поставщика библиотеки.
Вам необходимо установить Acrobat. Проверено на Acrobat DC. Это код VB.net. Из-за того, что эти объекты являются COM-объектами, вы должны сделать «объект освобождения», а не просто «= Ничего». Вы можете преобразовать этот код здесь: https://converter.telerik.com/
Private Function ImageToPDF(ByVal FilePath As String, ByVal DestinationFolder As String) As String
Const PDSaveCollectGarbage As Integer = 32
Const PDSaveLinearized As Integer = 4
Const PDSaveFull As Integer = 1
Dim PDFAVDoc As Object = Nothing
Dim PDFDoc As Object = Nothing
Try
'Check destination requirements
If Not DestinationFolder.EndsWith("\") Then DestinationFolder += "\"
If Not System.IO.Directory.Exists(DestinationFolder) Then Throw New Exception("Destination directory does not exist: " & DestinationFolder)
Dim CreatedFile As String = DestinationFolder & System.IO.Path.GetFileNameWithoutExtension(FilePath) & ".pdf"
'Avoid conflicts, therefore previous file there will be deleted
If File.Exists(CreatedFile) Then File.Delete(CreatedFile)
'Get PDF document
PDFAVDoc = GetPDFAVDoc(FilePath)
PDFDoc = PDFAVDoc.GetPDDoc
If Not PDFDoc.Save(PDSaveCollectGarbage Or PDSaveLinearized Or PDSaveFull, CreatedFile) Then Throw New Exception("PDF file cannot be saved: " & PDFDoc.GetFileName())
If Not PDFDoc.Close() Then Throw New Exception("PDF file could not be closed: " & PDFDoc.GetFileName())
PDFAVDoc.Close(1)
Return CreatedFile
Catch Ex As Exception
Throw Ex
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(PDFDoc)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(PDFDoc)
PDFDoc = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(PDFAVDoc)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(PDFAVDoc)
PDFAVDoc = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
End Try
End Function
не уверен, ищете ли вы просто бесплатные решения с открытым исходным кодом или рассматриваете и коммерческие. Но если вы включаете коммерческие решения, есть набор инструментов под названием EasyPDF SDK, который предлагает API для преобразования изображений (а также ряда других типов файлов) в PDF. Он поддерживает C# и его можно найти здесь:
http://www.pdfonline.com/
Код C# будет выглядеть следующим образом:
Printer oPrinter = new Printer();
ImagePrintJob oPrintJob = oPrinter.ImagePrintJob;
oPrintJob.PrintOut(imageFile, pdfFile);
Чтобы быть полностью прозрачным, я должен заявить, что я работаю на создателей EasyPDF SDK (отсюда и мой псевдоним), поэтому это предложение не лишено личных предубеждений :) Но не стесняйтесь проверить версию eval, если вы заинтересованы. Ваше здоровье!
Существует множество инструментов сравнения. Я использую PrimoPDF (БЕСПЛАТНО). файл, и вы распечатываете его в формате PDF на свой диск. работает на винде