Como gerar um PDF programaticamente?

4

Gostaria de fazer um arquivo PDF composto inteiramente por uma pasta de imagens, de preferência sem compactação ou sujeira. Existe algum programa que me permita criar o arquivo PDF manualmente via script ou API? O importante é que a) meus JPEGs não são compactados uma segunda vez e b) eles são exibidos em sua resolução nativa, sem bordas. (Em outras palavras, eu gostaria que meu arquivo PDF tivesse nada mais do que os dados de imagem JPG retos centralizados em 0,0 em cada página, dimensionados corretamente.) Até onde eu sei, a maioria dos programas de criação recompacta as imagens e adiciona seu próprio material de layout.

    
por Archagon 02.09.2011 / 11:55

2 respostas

5

Você diz "à mão", o que confundiu algumas pessoas, eu acho. Você não está realmente dizendo que quer escrever PDF bruto, certo? Abaixo está o código que usa a biblioteca iTextSharp de código aberto (5.1.1.0). Defina a variável FolderWithImages para sua pasta contendo imagens e PdfFileName para o PDF que você deseja expulsar e ele pegará todos os JPGs na pasta e criará um PDF. Este código é muito simples, mas você pode fazer muitas coisas, como redimensionar, dimensionar, etc. Há muitos códigos para o iTextSharp e seu projeto pai 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();
        }
    }
}
    
por 02.09.2011 / 18:40
3

Criar arquivos PDF manualmente não é recomendável para os mais sensíveis! Se você realmente quiser experimentar, escrevemos uma série sobre a criação de arquivos PDF à mão em nosso blog

    
por 02.09.2011 / 12:42

Tags