Sto cercando di unire molti pdf e per ogni pdf voglio aggiungere un segnalibro (il nome del pdf), ho trovato tecniche difrent di fusione di pdf ma nessuno di loro può aggiungere solo il segnalibro per es. itextsharp aggiunge un capitolo, quindi il segnalibro per il capitolo, non voglio alterare i pdf.Unione di file PDF con segnalibri
risposta
Utilizzando itextsharp puoi farlo. lo faccio, seguendo il metodo ...
MergePdfFiles(string outputPdf, string[] sourcePdfs)
{
PdfReader reader = null;
Document document = new Document();
PdfImportedPage page = null;
PdfCopy pdfCpy = null;
int n = 0;
int totalPages = 0;
int page_offset = 0;
List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();
IList<Dictionary<string, object>> tempBookmarks;
for (int i = 0; i <= sourcePdfs.GetUpperBound(0); i++)
{
reader = new PdfReader(sourcePdfs[i]);
reader.ConsolidateNamedDestinations();
n = reader.NumberOfPages;
tempBookmarks = SimpleBookmark.GetBookmark(reader);
if (i == 0)
{
document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
pdfCpy = new PdfCopy(document, new FileStream(outputPdf, FileMode.Create));
document.Open();
SimpleBookmark.ShiftPageNumbers(tempBookmarks, page_offset, null);
page_offset += n;
if (tempBookmarks != null)
bookmarks.AddRange(tempBookmarks);
// MessageBox.Show(n.ToString());
totalPages = n;
}
else
{
SimpleBookmark.ShiftPageNumbers(tempBookmarks, page_offset, null);
if (tempBookmarks != null)
bookmarks.AddRange(tempBookmarks);
page_offset += n;
totalPages += n;
}
for (int j = 1; j <= n; j++)
{
page = pdfCpy.GetImportedPage(reader, j);
pdfCpy.AddPage(page);
}
reader.Close();
}
pdfCpy.Outlines = bookmarks;
document.Close();
}
Eseguire questo codice e unire pdf ma non aggiungere segnalibri. I file pdf iniziali devono avere segnalibri da mostrare nel pdf finale. – Moji
Basta dire Grazie per questo codice! Ho navigato sul web negli ultimi giorni fino a quando non mi sono imbattuto in questo momento. Grazie ancora! – calcazar
ok, dopo qualche tempo di ricerca mi sono imbattuto in questo pezzo di codice, funziona perfettamente! – Gelootn
Prova Docotic.Pdf library per l'attività.
Ecco un esempio di codice che fa quello che hai descritto:
public static void combineDocumentsWithBookmarks()
{
string[] names = new string[] { "first.pdf", "second.pdf", "third.pdf" };
using (PdfDocument pdf = new PdfDocument())
{
int targetPageIndex = 0;
for (int i = 0; i < names.Length; i++)
{
string currentName = names[i];
if (i == 0)
pdf.Open(currentName);
else
pdf.Append(currentName);
pdf.OutlineRoot.AddChild(currentName, targetPageIndex);
targetPageIndex = pdf.PageCount;
}
// setting PageMode will cause PDF viewer to display
// bookmarks pane when document is open
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("output.pdf");
}
}
Il campione combina diversi documenti in un unico PDF e crea dei segnalibri. Ogni segnalibro punta alla prima pagina del documento originale.
Disclaimer: Lavoro per la società che sviluppa la libreria Docotic.Pdf.
public string MergeFiles(string outputPath)
{
if (string.IsNullOrEmpty(outputPath))
throw new NullReferenceException("Path for output document is null or empty.");
using (Document outputDocument = new Document())
{
using (PdfCopy pdf = new PdfCopy(outputDocument, new FileStream(outputPath, FileMode.Create)))
{
outputDocument.Open();
// All bookmarks for output document
List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();
// Bookmarks of the current document
IList<Dictionary<string, object>> tempBookmarks;
int pageOffset = 0;
// Merge documents and add bookmarks
foreach (string file in Files)
{
using (PdfReader reader = new PdfReader(file))
{
reader.ConsolidateNamedDestinations();
// Get bookmarks of current document
tempBookmarks = SimpleBookmark.GetBookmark(reader);
SimpleBookmark.ShiftPageNumbers(tempBookmarks, pageOffset, null);
pageOffset += reader.NumberOfPages;
if(tempBookmarks != null)
// Add bookmarks of current document to all bookmarks
bookmarks.AddRange(tempBookmarks);
// Add every page of document to output document
for (int i = 1; i <= reader.NumberOfPages; i++)
pdf.AddPage(pdf.GetImportedPage(reader, i));
}
}
// Add all bookmarks to output document
pdf.Outlines = bookmarks;
}
}
return outputPath;
}
ho ottimizzato risposta di Md Kamruzzaman Sarker utilizzando un ciclo foreach di andare oltre i PDF e utilizzando le istruzioni. Questo mi sembra più pulito ma tutti i crediti vanno a lui.
- 1. Creazione di segnalibri con eclissi
- 2. Creare segnalibri in un file PDF tramite la riga di comando
- 3. Unione di file hdfs
- 4. Crea un file PDF di documentazione Python
- 5. Unione di file CSS
- 6. unione di due file
- 7. Differenze/unione di due file
- 8. pdf.js con file pdf locale
- 9. Unione di più file javascript
- 10. Ramo mercuriale e segnalibri
- 11. Migradoc, Paragrafo PDFsharp senza segnalibri associati
- 12. Unione di file di progetto Xcode
- 13. Scopo del documento, Segnalibri con ambito di sicurezza per pacchetti di file
- 14. Leggi segnalibri di Firefox utilizzando C#
- 15. Unione di due file con cat senza nuova riga
- 16. Come aggiungere una pagina aggiuntiva al pdf esistente mantenendo i segnalibri? (PDFSharp ecc.)
- 17. Unione di db/file di migrazione
- 18. Git unione dei file spostati
- 19. Unione di stringhe con limite
- 20. Evitare conflitti di unione nei file resx
- 21. Aree rettangolari di unione (unione booleana) con precisione intera
- 22. Modifica metadati del file pdf con pypdf
- 23. Leggi i file pdf con php
- 24. Creare un file PDF con PHP
- 25. come incorporare file PDF con larghezza reattivo
- 26. Come unire file PDF con annotazioni
- 27. Estrazione di testo tra due segnalibri utilizzando Apache PdfBox
- 28. Unione di file video mp4 su Android
- 29. unione di stringhe con corrispondenza parziale
- 30. Unione di modifiche PHP con diff/patch
Forse è necessario estrarre le singole pagine e riassemblarle in un unico file. In questo modo è possibile contrassegnare la prima pagina di ogni pdf con il segnalibro – gyurisc
Non so come aggiungere un simplebookmark – XandrUu