2010-01-22 10 views
2

Il s'agit à peu près d'un doublon de this unanswered question, mais j'espère que quelqu'un de mes connaissances le regarde et peut vous être utile.Utilisation de iTextSharp pour sauvegarder les fichiers utilisés dans un fichier PDF

Je suis à la recherche de la capacité d'avoir du code. NET extraire la police intégrée dans un fichier PDF à un fichier de police. J'utilise actuellement iTextSharp, mais je suis ouvert à d'autres bibliothèques .NET (par exemple PDFBox, PDF CLown, etc ...). Je suis capable d'itérer l'information de BaseFont.GetDocumentFonts(), mais je ne suis pas clair sur la façon de diffuser la police sur un fichier de police.

Merci, Kenny

+0

Ceci est considéré comme du piratage sauf si les polices incorporées sont dans le domaine public. –

+0

Notre plan est de les transmettre en tant que polices protégées dans un document converti du même type, pas les voler. – kenny

+1

Je devrais ajouter, avec l'approbation du propriétaire du document. – kenny

Répondre

0

Je n'ai pas une réponse, mais je ne trouve plusieurs solutions basées sur le fournisseur. Le logiciel de pdf-tools.com, pdfextract.exe fonctionne très bien. Aussi la bibliothèque de quickpdflibrary.com fonctionne très bien aussi et est le vendeur avec lequel nous sommes allés avec et jusqu'ici très heureux.

+0

Connaissez-vous un moyen de lire les noms de polices utilisés dans le pdf? Je travaille sur un projet dans lequel pdfs doit être converti en PDF/A et qui nécessite également l'ajout de polices. – Highmastdon

+0

@Highmastdon désolé, il y a trop d'années que j'ai traité avec des fichiers PDF. Je suis assez confiant que vous pouvez facilement obtenir les noms de police bien. – kenny

1

@Highmastdon - il est vraiment très simple d'obtenir les noms de police, au moins dans iText/iTextSharp (pdfBox aussi - mais je n'ai pas le code autour maintenant) mais dans iTextSharp vous feriez ce qui suit:

PdfReader reader = new PdfReader(strFileName); 
List<object[]> strFonts = BaseFont.GetDocumentFonts(reader); 

Et là, il est, la plupart des bibliothèques ont un soutien écrit pour une extraction simple des polices (les noms dans tous les cas).

+0

FontNames oui. Mais à l'époque, je cherchais les polices intégrées. Merci, mais j'ai quitté ce concert il y a longtemps. – kenny

1

J'ai déjà répondu à cette question, mais dans le but d'ajouter de solides exemples aux sujets de ce site (quelque chose dont j'avais terriblement besoin il y a trois mois), je vais parcourir la solution que j'ai utilisée. J'ai téléchargé MuPDF et est allé dans le dossier bin, récupérer le fichier mutool.exe. J'appelle alors ceci avec un processus séparé en C#. Il parcourt toutes les polices incorporées dans le fichier PDF et les stocke dans le dossier contenant mutool.exe. Ensuite, il était juste une question de déplacer les polices à partir de là dans le dossier que je voulais dans.

 /// <summary> 
     /// Extract all fonts from PDF 
     /// </summary> 
     /// <param name="strPDFName"></param> 
     public static void ExtractAll(string strPDFName) 
     { 
      if (strMUTOOL != null && strFontFinal != null) 
      { 
       Process p = new Process(); 
       p.StartInfo.FileName = strMUTOOL; 
       p.StartInfo.Arguments = "extract \"" + strPDFName + "\""; 
       p.StartInfo.UseShellExecute = false; 
       p.StartInfo.RedirectStandardError = true; 
       p.StartInfo.RedirectStandardOutput = true; 
       p.StartInfo.CreateNoWindow = true; 
       p.StartInfo.WorkingDirectory = strMUTOOL.Replace("mutool.exe", "").Trim(); 

       p.Start(); 
       p.WaitForExit(); 

       var standardError = p.StandardError.ReadToEnd(); 
       var standardOutput = p.StandardOutput.ReadToEnd(); 
       var exitCode = p.ExitCode; 
      } 
     } 

un peu comme un heads-up, la plupart de ces polices sont des fichiers CFF et vous aurez besoin de les convertir si vous prévoyez de les utiliser. Aussi, comme cela a été indiqué, l'utilisation de ces polices peut constituer un piratage de logiciels si ces polices sont des polices payantes. Enfin, ces polices ne sont généralement que des sous-ensembles et ne contiennent pas le jeu complet de glyphes - seulement les glyphes utilisés dans le PDF.