C# 编辑XPS内容

C# 编辑XPS内容,c#,printing,xps,C#,Printing,Xps,我有一个应用程序,应该发送一个格式化的文件到打印机与一些条形码 我还开发了其他应用程序,可以与打印机一起工作,并通过发送xps文件直接通过printserver打印,因此我想我会尝试制作一个.xps文件,更改文本并完成它,但是我在网上找到的每一篇文章都与创建xps文件有关,而不是更改它们。我觉得这应该是可能的,如果不必在服务器上安装Office并在那里打印,那就太好了。然后,我还可以使用OpenXML和.docx文件 这很简单。假设我想将.xps文件中的incnumer文本更改为“testin

我有一个应用程序,应该发送一个格式化的文件到打印机与一些条形码

我还开发了其他应用程序,可以与打印机一起工作,并通过发送xps文件直接通过printserver打印,因此我想我会尝试制作一个.xps文件,更改文本并完成它,但是我在网上找到的每一篇文章都与创建xps文件有关,而不是更改它们。我觉得这应该是可能的,如果不必在服务器上安装Office并在那里打印,那就太好了。然后,我还可以使用OpenXML和.docx文件

这很简单。假设我想将.xps文件中的incnumer文本更改为“testing123”。我该怎么做呢

我尝试了整个解压过程,打开xml,查找文本,编辑,重新压缩,但是我担心.xps格式太多了,我不理解它


向您致意,Kaspar。

您已经知道,XPS文件只是一个ZIP归档文件,包含许多具有特定名称和定义结构的文件和文件夹

在根级别有一个
文档
文件夹,通常只包含一个名为
1
的文档文件夹。其中是一个包含一个或多个
.fpage
文件的
页面
文件夹:这些文件定义文档中每个页面的内容

Documents
    1
        Pages
            1.fpage
            2.fpage
            etc
如果在文本编辑器中打开这些
.fpage
文件,您将看到它们只是XML文件。每个页面通常由一个
元素表示,该元素包含多个
元素(文本由后者表示)。但是,即使
元素确实具有
UnicodeString
属性,该属性的值也不能单独更改

每个
元素还具有一个
索引
属性。如果完全删除此属性,同时更改
UnicodeString
属性,这几乎可以正常工作。但是,您可能会发现,在XPS Viewer应用程序中查看文件时,文本中的某些字符会被问号符号替换

字体图示符嵌入XPS文件(
Resources
文件夹中的
odttf
文件),生成XPS文件的软件将只嵌入源文档中使用的图示符。例如,这意味着(对于给定字体),如果未在源文档中使用字母“a”,则该字母的图示符将不会写入XPS文件的资源中。因此,如果将
UnicodeString
属性更改为包含字母“a”,则该字符将在查看器中显示为问号,因为它没有指示该字符必须如何绘制的字形资源

如果您可以控制源文档(稍后转换为XPS的文档),那么我想您可以包含一段包含可能使用的所有字符的文本,并将其颜色设置为白色,这样它就不会打印,但我不确定XPS打印机驱动程序是否会删除该文本。如果没有,那么您可能可以执行以下操作:

  • 打开相关的
    .fpage
    XML文件
  • 搜索
    元素的所有
    属性以查找所需的文本
  • 将该文本替换为其他文本
  • 从更改的
    元素中删除
    索引
    属性
  • 将更新后的XML保存回文件
  • 重新压缩,然后将扩展名从zip更改为XPS

还有一个本机Windows API可用于处理XPS文档:它为我指明了我需要的方向!我曾经尝试过解压它并找到xml,但得到了一些奇怪的结果。添加一行包含“0123456789abcdefghijklmnopqrstuvwxyz”i字体大小1(白色),使我能够在添加额外索引时更改图示符的内容。我会接受这个作为解决方案。我现在有同样的问题,我没有访问源XPS的权限。这里的问题:@Steven,我们在哪里可以看到.fpage文件?@Saravanakumaranatarajan在回答中说:“在根级别,有一个
文档
文件夹,通常只包含一个名为
1
的文档文件夹。其中有一个
页面
文件夹,包含一个或多个.fpage文件。”。