2010-03-02 77 views

回答

7

This thread(2007年6月)Paulo Soares提供的代码显示了对PDF/A的支持。下面是C#代码(他也有一个Java样品):

private void PdfATest() { 
    Document doc = new Document(PageSize.A4); 
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("C:\\hello_A1-b_cs.pdf", FileMode.Create)); 
    writer.PDFXConformance = PdfWriter.PDFA1B; 
    doc.Open(); 

    PdfDictionary outi = new PdfDictionary(PdfName.OUTPUTINTENT); 
    outi.Put(PdfName.OUTPUTCONDITIONIDENTIFIER, new PdfString("sRGB IEC61966-2.1")); 
    outi.Put(PdfName.INFO, new PdfString("sRGB IEC61966-2.1")); 
    outi.Put(PdfName.S, PdfName.GTS_PDFA1); 

    // get this file here: http://old.nabble.com/attachment/10971467/0/srgb.profile 
    ICC_Profile icc = ICC_Profile.GetInstance("c:\\srgb.profile"); 
    PdfICCBased ib = new PdfICCBased(icc); 
    ib.Remove(PdfName.ALTERNATE); 
    outi.Put(PdfName.DESTOUTPUTPROFILE, writer.AddToBody(ib).IndirectReference); 

    writer.ExtraCatalog.Put(PdfName.OUTPUTINTENTS, new PdfArray(outi)); 

    BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\arial.ttf", BaseFont.WINANSI, true); 
    Font f = new iTextSharp.text.Font(bf, 12); 
    doc.Add(new Paragraph("hello", f)); 

    writer.CreateXmpMetadata(); 

    doc.Close(); 
} 

上面的链接包括下载的文件的ICC_Profile。

+0

你可以在这里[http://www.color.org/srgbprofiles.xalter](http://www下载配置文件。 color.org/srgbprofiles.xalter) – 2012-07-30 17:37:11

4

这是我的解析HTML文件并从中创建PDF/A存档文档的方法,也是使用样式表嵌入字体(为了避免错误:“所有字体都必须嵌入。 “T:黑体“)

希望这可以帮助别人..

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using iTextSharp.text.pdf; 
using iTextSharp.text; 
using System.IO; 
using iTextSharp.text.html.simpleparser; 

namespace SaveAsPDF 
{ 
    class HtmlPdfConverter 
    { 
     public void RendererWebForm2PDFArchive(string fileName) 
     { 
      Console.WriteLine("Parsing HTML " + fileName); 
      Document document = new Document(PageSize.A4); 

      try 
      { 
       // we create a writer that listens to the document and directs a XML-stream to a file 
       PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fileName + ".pdf", FileMode.Create)); 

       //set document as arhive 
       writer.PDFXConformance = PdfWriter.PDFA1A; 
       document.Open(); 

       //apply stylesheet to change font (and embedd it) 
       StyleSheet styles = new StyleSheet(); 
       FontFactory.Register("c:\\windows\\fonts\\verdana.ttf"); 
       styles.LoadTagStyle("body", "face", "Verdana"); 

       //prepare html 
       StreamReader sr = new StreamReader(fileName, Encoding.Default); 
       string html = sr.ReadToEnd();         
       html = RemoveTag(html, "<title>", "</title>");     

       //convert string to stream 
       byte[] byteArray = Encoding.UTF8.GetBytes(html); 
       MemoryStream ms = new MemoryStream(byteArray); 

       //parse html 
       HTMLWorker htmlWorker = new HTMLWorker(document); 
       System.Collections.Generic.List<IElement> elements; 

       elements = HTMLWorker.ParseToList(new StreamReader(ms), styles); 
       foreach (IElement item in elements) 
       { 
        document.Add(item); 
       } 

       writer.CreateXmpMetadata(); 
       document.Close(); 
       Console.WriteLine("Done"); 
      } 
      catch (Exception e) 
      { 
       Console.Error.WriteLine(e.Message); 
       Console.Error.WriteLine(e.StackTrace); 
      } 
     }**strong text**