c# PDF库来操作PDF

本文关键字:PDF 操作 | 更新日期: 2023-09-27 18:03:29

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

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

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

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

我该怎么做?我的意思是,有c# API允许我这样做吗?

c# PDF库来操作PDF

您可以尝试https://sourceforge.net/projects/itextsharp/。一个出色的库,它提供了从创建,更新和许多其他功能到PDF的权力。还可以添加图片、段落和表格。

我建议您检查Html Renderer for PDFSharp (NuGet)。你可以用它把Html转换成PDF。

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

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

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

我通过创建带有占位符的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中的值替换了模板中的占位符:

        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到你的项目

希望这对你有帮助。