代码之家  ›  专栏  ›  技术社区  ›  Silly Dude

操作PDF的C#PDF库

  •  3
  • Silly Dude  · 技术社区  · 9 年前

    我们的医疗仪器生成患者数据和图像。医院希望收到一份PDF文档,其中包含患者详细信息和图像,格式非常具体——A4页、特定位置的条形码、特定页边距等。

    我不想在代码中从空白画布一行一行地组装这个PDF,因为如果我这样做,我将不得不编写数千行代码,当我们有一个不同的客户想要不同的格式时,我们需要再次重写这数千行代码。而且,如果客户希望在格式上做一些小的更改,我们需要进行新的发布。

    我想以“邮件合并”的方式进行:我创建一个报告模板,一个带有条形码、页眉和页脚以及所有其他静态内容的就绪文档。模板中的患者详细信息和图像有特殊的占位符,如“[@PatinetFirstName@]”、“[@PatientLastName@]“、”[@PatientPreviousVisitsTable@]“……然后,对于每个患者,我的代码将复制此模板,找到这些特殊的占位符,并用实际数据或图像替换它们。这样,如果不同的客户端需要不同的格式,我所需要做的就是编辑这个模板,我的代码保持不变。

    这意味着我需要能够使用此库在现有PDF中进行搜索和替换,在任何位置插入段落、表格和图像,并能够指定段落和表格的格式以及图像的大小和分辨率。

    我该怎么做?我的意思是,有没有一个C#API允许我这样做?

    3 回复  |  直到 9 年前
        1
  •  2
  •   ravinsp    9 年前

    我建议你退房 Html Renderer for PDFSharp (NuGet) 。您可以使用它将Html转换为PDF。

    这意味着您可以将模板(包括@placeholders)保留在数据库中,并用值动态填充Html模板,并将其转换为PDF。如果以后需要更改格式,只需更改Html模板即可。

    至于搜索和替换,如果在转换为PDF之前存储了Html标记,则可以在Html标识中进行搜索和替换然后从新的Html标注重新生成PDF。

    生成PDF以发送给客户端。但要处理所有其他系统处理的原始Html。

        2
  •  2
  •   Lara    9 年前

    你可以试试 https://sourceforge.net/projects/itextsharp/ 这是一个出色的库,它可以对PDF做任何事情,包括创建、更新和许多其他功能。还可以添加图像、段落和表格。

        3
  •  1
  •   DotNet Developer    4 年前

    我通过创建带有占位符的txt文件解决了相同的任务:

    This contract is an agreement between {renter}, who will be renting a house from {owner}, who owns the house being rented. 
    {paragraphbreak}
    The owner agrees to rent the house in its present condition located at {address} to the renter under this terms.
    {paragraphbreak}
    

    并创建了另一个文件contract_dictionary。json,包含可以从客户更改为客户的json:

    [
      {
        "Key": "renter",
        "Value": "John Smith"
      },
      {
        "Key": "owner",
        "Value": "Samanta Jackson"
      },
    

    然后在我的代码中,我用json中的值替换tempate中的占位符:

            ContractContent = ContractContent.ConvertAll(c => c.Replace("{paragraphbreak}", " "));
            foreach (ContractDictionary item in DictionaryData)
            {
                ContractContent = ContractContent.ConvertAll(c => c.Replace("{" + item.Key + "}", item.Value));
            }
    

    然后,将其渲染为PDF文件:

    using Gehtsoft.PDFFlow.Builder;
    var s = builder.AddSection();
    foreach (var paragraph in ContractContent)
                s.AddParagraph(paragraph).SetFont(DocumentFont).SetJustifyAlignment(true);
    

    以下是此解决方案的源代码和说明性文章: HouseRentalContract .

    Gehtsoft.PDFFlowLib 到您的项目。