【问题标题】:Embedding text file into RTF file with python or .net core使用 python 或 .net 核心将文本文件嵌入到 RTF 文件中
【发布时间】:2019-11-16 17:45:58
【问题描述】:

我有一个要求,其中包括将文件嵌入(文本文件)到动态生成的 RTF 文件中。

我目前能够毫无问题地生成 RTF,但我还需要在其中嵌入一个或多个 txt 文件。

我做了一些研究,还研究了 rtf 规范。看起来可能有一种方法可以用 \object 标签做到这一点,但据我所知 \objdata 内容应该是 OLE 格式。这是唯一的方法吗? (我希望我可以包含在字节数组格式中)或者有没有办法将 txt 文件内容转换为这种格式以便我可以包含?

我目前有几个用 python 和 c#(dotnet core)编写的微服务,它们都在 linux env 的 docker 容器上运行。所以最好我需要一种适合这些的方法。

提前谢谢你。

【问题讨论】:

    标签: c# python .net-core rtf ole


    【解决方案1】:

    Aspose.Words 允许将嵌入的 OLE 对象插入 Word 文档,它有 .NET Standard 2.0 版本。 https://apireference.aspose.com/net/words/aspose.words.documentbuilder/insertoleobject/methods/2

    【讨论】:

    • 谢谢,我认为除了这些付费选项外没有太多选择。
    【解决方案2】:

    我在这里使用了一个实用的解决方案,当文本文件应该嵌入到 RTF 文档中时,它可以工作。

    1. 将所需文档另存为 RTF,在要替换的文本位置使用虚拟文本。
    2. 使用文本编辑器打开此 RTF,并将 \par 行替换为替换标记 [!!! replace me !!!]

    发件人:

        ... prefix rtf stuff ...
        \par text foo
        \par bar text
        \par text baz
        ... suffix rtf stuff ...
    

    收件人:

        ... prefix rtf stuff ...
        [!!! replace me !!!]
        ... suffix rtf stuff ...
    
    1. 另存为template.rtf
    2. 在 C# 中,读取要嵌入到字符串中的文本文件,并在每行前面加上 \par<space>。将模板读入第二个字符串,并用第一个字符串替换那里的标记。
    3. 将此另存为 new.rtf。

    这是一个示例(抱歉,仅限 Perl,C# 也应该是 10 行):

    #!/usr/bin/perl
    use strict;
    
    my $contents = "";
    my $first = 1;
    while(<>) {
        if (!$first) {
            $contents .= "\\par ".$_;
        } else {
            $contents .= $_;
            $first = 0;
        }
    }
    
    my $file = 'template.rtf';
    open my $fh, '<', $file or die;
    $/ = undef;
    my $data = <$fh>;
    close $fh;
    
    $data =~ s/\[!!! replace me !!!\]/$contents/g;
    
    print $data;
    

    这样称呼:

    perl mkrtf.pl <test.lst >test.rtf
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2016-04-26
      • 2012-12-31
      相关资源
      最近更新 更多