Я хотел бы сделать PDF-файл, состоящий полностью из папки изображений, предпочтительно без дополнительного сжатия или cruft. Есть ли какие-либо программы, которые позволили бы мне создать PDF-файл вручную с помощью скрипта или API? Важно то, что A) мои JPEG-файлы не сжимаются во второй раз, и b) они отображаются в своем собственном разрешении без границ. (Другими словами, Я хотел бы, чтобы мой PDF-файл имел не более чем прямые данные изображения JPG с центром 0,0 на каждой странице, размером правильно.) Насколько я могу судить, большинство авторских программ сжимают изображения и добавляют свои собственные макеты.
Как генерировать PDF программно?
2 ответа
вы говорите "вручную", что, я думаю, смутило некоторых людей. Вы же не говорите, что хотите писать raw PDF, верно? Ниже приведен код, который использует открытый исходный код библиотека iTextSharp (5.1.1.0). Задайте переменную FolderWithImages
в папку, содержащую изображения, и PdfFileName
в PDF, который вы хотите выгнать, и он будет принимать все JPG в папке и создать PDF. Данный код очень простой, но вы можете сделать много вещей, таких как изменение размеров, масштабирование и т. д. Там тонны кода там для iTextSharp и его родительского проекта iText.
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//The folder containing our images
string FolderWithImages = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
//The PDF that we will output
string PdfFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "ImagesCombined.pdf");
//Create a basic stream to write to
using (FileStream fs = new FileStream(PdfFileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
//Create a new PDF document
using (Document doc = new Document())
{
//Bind a the document to the stream
using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
{
//Open our document for writing
doc.Open();
//Will hold an instance of our image
iTextSharp.text.Image img;
//Grab all JPGs from the given folder and loop through them
string[] Images = Directory.GetFiles(FolderWithImages, "*.jpg", SearchOption.TopDirectoryOnly);
foreach (string i in Images)
{
//Get the JPG as an iTextSharp "image"
img = iTextSharp.text.Image.GetInstance(i);
//Tell the image that when placed we want it at (0,0)
img.SetAbsolutePosition(0, 0);
//Tell the system that the next "page" that we add should be the dimension of the image
doc.SetPageSize(new iTextSharp.text.Rectangle(0, 0, img.Width, img.Height));
//Add a new blank page
doc.NewPage();
//Put the image on the blank page
doc.Add(img);
}
//Close our output PDF
doc.Close();
}
}
}
this.Close();
}
}
}
создание PDF файлов вручную не рекомендуется для слабонервных! Если вы действительно хотите попробовать, мы написали серию о создании PDF файлов вручную на нашем блоге http://blog.idrsolutions.com/2010/09/grow-your-own-pdf-file-part-1-pdf-objects-and-data-types/
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]