我必须操作docx文档,只是为了替换一些$变量,并且需要在将其发送给最终用户之前将其转换为PDF格式.我正在使用Java开发一个使用SpringFramework的webapp.
我一直在网上搜索一些可以帮助我完成这项任务的库,我找到了一个似乎处于早期开发阶段的xdocreport.你知道这个任务的其他Java库吗?
我正在使用python库docx:http://github.com/mikemaccana/python-docx
我的目标是打开一个文件,替换某些单词,然后用替换文件写入该文件.
我目前的代码:
#! /usr/bin/python
from docx import *
openDoc = "test.docx"
writeDoc = "test2.docx"
replace = {"Test":"TEST"}
document = opendocx(openDoc)
docbody = document.xpath('/w:document/w:body', namespaces=nsprefixes)[0]
print getdocumenttext(document)
for key in replace:
if search(docbody, key):
print "Found" , key , "replacing with" , replace[key]
docbody = replace(docbody,key,replace[key])
print getdocumenttext(document)
# ideally just want to mirror current document details here..
relationships = relationshiplist()
coreprops = coreproperties(title='',subject='',creator='',keywords=[])
savedocx(document,coreprops,appproperties(),contenttypes(),websettings(),wordrelationships(relationships),'a.docx')
Run Code Online (Sandbox Code Playgroud)
`但是我收到以下错误:
Traceback (most recent call last):
File "process.py", line 17, in <module> …Run Code Online (Sandbox Code Playgroud) 我有一些占位符的docx文档.现在我应该用其他内容替换它们并保存新的docx文档.我从docx4j开始,发现了这个方法:
public static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {
List<Object> result = new ArrayList<Object>();
if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue();
if (obj.getClass().equals(toSearch))
result.add(obj);
else if (obj instanceof ContentAccessor) {
List<?> children = ((ContentAccessor) obj).getContent();
for (Object child : children) {
result.addAll(getAllElementFromObject(child, toSearch));
}
}
return result;
}
public static void findAndReplace(WordprocessingMLPackage doc, String toFind, String replacer){
List<Object> paragraphs = getAllElementFromObject(doc.getMainDocumentPart(), P.class);
for(Object par : paragraphs){
P p = (P) par;
List<Object> texts = getAllElementFromObject(p, Text.class);
for(Object …Run Code Online (Sandbox Code Playgroud) 我正在使用 XML 从头开始构建 DocX 文档。我有一个非常简单的目标:创建一个项目符号列表,就像ulHTML 中的a 一样。阅读编号列表的WordProcessingML 规范(第 2.9 节),我创建了我认为可以满足此要求的内容。这是我的numbering.xml样子:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:numbering xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<w:abstractNum w:abstractNumId="1">
<w:multiLevelType w:val="singleLevel"/>
<w:lvl w:ilvl="0">
<w:start w:val="1"/>
<w:numFmt w:val="bullet"/>
<w:lvlText w:val="•"/>
<w:lvlJc w:val="left"/>
<w:pPr>
<w:tabs>
<w:tab w:pos="360" w:val="num"/>
</w:tabs>
<w:ind w:hanging="360" w:left="360"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/>
</w:rPr>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="1"/>
</w:num>
</w:numbering>
Run Code Online (Sandbox Code Playgroud)
所以我有一个 id 为 1 的抽象编号,定义为带有一些缩进的单个级别和一个项目符号作为 lvlText(符号•呈现为 …
据我所知,docx 文件是 xml 文件的压缩集合。在 Windows 7(我尝试过此操作的唯一操作系统)上,如果我保存文件,从 Word 说 f.docx,然后退出 Word 并将文件名更改为 f.zip,我可以解压缩包并阅读组件文件。但是,如果我随后删除并重新压缩 f 文件夹(不进行任何修改)并将扩展名更改回 docx,则会收到一条错误消息,指出“文件 f.docx 无法打开,因为内容存在问题”。当我查看详细信息时,它说“Microsoft Office 无法打开此文件,因为某些部分丢失或无效。”
问题:这是为什么?又如何能完成各个部分重新组合成一个有效的docx文件?
这里提出了一个类似的问题,但提供的解决方案不起作用。正如我上面提到的,我没有更改文件夹中的任何内容,甚至也没有打开文件。虽然我不明白为什么它会相关,但我重新压缩文件的方法是使用上下文菜单命令“发送到压缩(zipped)文件夹”。
我可以使用段落对象在表格单元格中选择字体大小,颜色,粗体等.但是,add_paragraph()似乎总是将一个前导\n插入到单元格中,这会混淆某些表格上的格式.
如果我只是使用该cell.text('')方法,它不会插入此换行符,但我无法控制文本属性.
有没有办法消除这个领先的换行线?
这是我的功能:
def add_table_cell(table, row, col, text, fontSize=8, r=0, g=0, b=0, width=-1):
cell = table.cell(row,col)
if (width!=-1):
cell.width = Inches(width)
para = cell.add_paragraph(style=None)
para.alignment = WD_ALIGN_PARAGRAPH.LEFT
run = para.add_run(text)
run.bold = False
run.font.size = Pt(fontSize)
run.font.color.type == MSO_COLOR_TYPE.RGB
run.font.color.rgb = RGBColor(r, g, b)
Run Code Online (Sandbox Code Playgroud) 我正在使用meteor 开发一个应用程序,需要替换docx 文档中的特定单词。我找到了一种将 docx 文件转换为 xml 的方法,我需要进行的替换发生在 xml 文件中。
问题是,替换xml中的那些词后,如何恢复docx-document?
您能否告诉我是否可以将 docx 文档加载到 phpword,然后更改加载的文档中的字体名称、大小、行距,然后将其保存到另一个 docx 文件中?
我现在正在阅读 phpword 官方 docx,但正如我所见,创建一个新文档(例如,通过段落的某些字体名称、大小和行间距设置)比更改加载的文档要多得多。或者也许我错了?
那么是否可以为加载的文档更改这些“字体设置”?或者也许可以对加载的文档进行一些解析,例如对所有段落进行一些解析,然后为每个文本段落更改“字体设置”?
预先感谢您的帮助!
真诚的你,
阿尔韦苏
我正在使用 JodConverter 将我的 .docx (Microsoft Office) 文件转换为 pdf 但不知何故它没有隐藏并给我错误。版本 2.2.0 。
我的问题是是否可以使用 JODCoverter 将 .docx 文件转换为 pdf?
我想知道是否有一种方法可以避免在Jinja的docx模板中的for中使用换行符。代码如下:
{% for customer in customers %}
{% for account in customer.accounts %}
{{ account.number }}
{% endfor %}{% endfor %}.
Run Code Online (Sandbox Code Playgroud)
但是结果是帐号被行隔开:
234090
29292
29292
我正在LibreOffice上进行测试。
有人可以帮我吗?