Quantcast
Channel: Inverter PDF
Viewing all articles
Browse latest Browse all 9

Inverter PDF

$
0
0
 Eduardo Marques da Costa wrote:
Code Snippet

Oi, Leandro.

Na API iTextSharp você trabalha basicamente com dois objetos: um PdfWriter e um Document, sendo que você "liga" um objeto PdfWriter a um objeto Document (que representa o documento pdf mesmo).

O objeto PdfWriter trabalha com streams de arquivos, então, você pode ou passar direto um outro objeto stream pra ele (eu costumo gerar um stream a partir do response do Reporting Services) ou indicar o caminho de um arquivo físico e o próprio objeto PdfWriter se encarrega de ler este arquivo físico e gerar seu próprio stream).

Para o que você precisa você poderia utilizar uma rotina como essa:

Code Snippet
public void ReordenarPDF(string caminho)
{
// caminho = c:\arquivoaordenar.pdf", por exemplo

PdfWriter pdfWriter = null;
Document objetoDocumentPDF = new Document();

try
{
// O método GetInstance é quem "liga" o objeto documentPDF com o arquivo físico
// Como ele recebe um stream, você pode passar um FileStream (como fiz abaixo)
// Ou ler direto de um Response.Stream de request para um relatório do RPServices
pdfWriter = PdfWriter.GetInstance(objetoDocumentPDF, new FileStream(caminho, FileAccess.ReadWrite));

int[] paginasReordenadas = {3, 2, 1};

// Muito importante: "abrir" o documento antes de executar a reordenação

objetoDocumentoPDF.Open();

pdfWriter.ReorderPages(paginasReordenadas);

objetoDocumentoPDF.Close();
}
catch
{
// Adicionar algum tratamento aqui :)
}
finally
{
// Liberar os objetos...
if(objetoDocumentPDF != null && objetoDocumentPDF.IsOpen())
{
objetoDocumentPDF.Close();
}

if(pdfWriter != null)
{
pdfWriter.Close();
}
}
}





Bom, escrevi o exemplo no Notepad mas a lógica é essa. Dê uma olhada, teste, e qualquer coisa me avise.

Abraço.



Então cara, desde cedo, estou fazendo isso, ja fiz algo mto parecido...
Dei uma olhada no seu codigo agora e fiz algumas alterações nada demais...
porem ele continua dando esse erro

"Page reordering requires an array with the same size as the number of pages."

ps.: Estou usando um pdf, com tres paginas mesmo tudo certinho...



Estava fazendo assim;


Code Snippet

  PdfStamper stamp = null;
                PdfReader reader = new PdfReader(@"C:\Documents and Settings\Leandro.andrade\Desktop\Microsoft Word - readme.pdf");
                if (!File.Exists(@"C:\leandro.pdf"))
                {
                    int pageCount = reader.NumberOfPages;
                    int[] newOrder = new int[pageCount];
                    int aux = pageCount;
                    stamp = new PdfStamper(reader, new FileStream(@"C:\leandro.pdf", FileMode.OpenOrCreate));
                    for (int i = 0; i < pageCount; i++)
                    {
                        newOrder[i] = aux;
                        aux--;
                    }
                    stamp.Writer.Open();
                    stamp.Writer.ReorderPages(newOrder);
                    stamp.Close();
                }



Viewing all articles
Browse latest Browse all 9

Latest Images

Trending Articles





Latest Images