- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将表格的格式从一个 OpenOffice Writer 文件复制到另一个文件...我可以看出我正在将样式名称写入第二个文档,而不是样式数据。
我怀疑这与odfContainer
的'styles'
部分有关,但我不清楚如何将其写入第二个文档,特别是因为当我在调试器中检查 $style
对象时,它似乎与 $doc
对象相同,据称该对象已加载 'content'
部分。
这是我到目前为止所得到的......
#! /usr/bin/perl
use warnings;
use strict;
use OpenOffice::OODoc;
my $file='mytest.odt';
my $outfile='doc2.odt';
# load input file
my $container = odfContainer("$file");
$container->raw_export("styles.xml");
my $doc = odfDocument
(
container => $container,
part => 'content'
);
my $style = odfDocument
(
container => $container,
part => 'styles'
);
# load output file
my $container2 = odfContainer( $outfile, create => 'text' );
$container2->raw_import("styles.xml");
my $doc2 = odfDocument
(
container => $container2,
part => 'content'
);
# Load table from 'mytest.odt'
my $table=$doc->getTable(0);
# Get style from first cell in $table
my $headerstyle=$doc->getStyle( $doc->getCell($table, 0, 0) );
# Create table in $doc2
my $newtable=$doc2->appendTable('newtable', 1, 1, 'table-style' => $doc->getStyle($table) );
# Set style of first cell in $newtable to 'Table1.A1'
$doc2->cellStyle( $newtable, 0, 0, 'Table1.A1' );
# Write 'doc2.odt' to disk
$container2->save;
我加载 'Table1.A1'
作为单元格样式的原因是,在检查调试器内部时,我在 $table
深处发现了以下内容:
'next_sibling' => OpenOffice::OODoc::Element=HASH(0x102029250)
'att' => HASH(0x102029180)
'style:family' => 'table-cell'
'style:name' => 'Table1.A1'
'empty' => 0
'first_child' => OpenOffice::OODoc::Element=HASH(0x1020294a0)
'att' => HASH(0x102029200)
'fo:background-color' => '#cccccc'
'fo:border' => '0.0069in solid #000000'
'fo:padding-bottom' => '0in'
'fo:padding-left' => '0.075in'
'fo:padding-right' => '0.075in'
'fo:padding-top' => '0in'
'style:vertical-align' => 'top'
'style:writing-mode' => 'lr-tb'
我知道这些属性与我要复制的内容相匹配,而且我还通过实验知道 'getStyle'
方法返回 style::name
属性...我只是不知道如何使用 cellStyle
方法设置 style::name
属性来实际将底层数据写入新文档.
编辑:
解压 OpenOffice 文件,我得到几个 xml 文件:
等等
OdfContainer
的 'styles'
和 'content'
部分对应于 styles.xml 和 content.xml。 Styles.xml 有点像 css 文件,包含 ODF 文件各个 header 级别的样式信息。 Content.xml 还包含样式信息,很像 html 文档中的 css header 。
这是从 odt 文件中提取的 content.xml 的样式部分(实际上很像......我没有保存原始文件)。
<?xml version="1.0" encoding="utf-8"?>
<office:document-content>
...
<office:automatic-styles>
<style:style style:name="Table6" style:family="table" style:master-page-name="First_20_Page">
<style:table-properties style:width="6.9208in" style:page-number="auto" table:align="left" style:writing-mode="lr-tb" />
</style:style>
<style:style style:name="Table6.A" style:family="table-column">
<style:table-column-properties style:column-width="1.2729in" />
</style:style>
<style:style style:name="Table6.B" style:family="table-column">
<style:table-column-properties style:column-width="3.2604in" />
</style:style>
<style:style style:name="Table6.C" style:family="table-column">
<style:table-column-properties style:column-width="2.3875in" />
</style:style>
<style:style style:name="Table6.1" style:family="table-row">
<style:table-row-properties style:min-row-height="0.1597in" style:keep-together="true" fo:keep-together="auto" />
</style:style>
<style:style style:name="Table6.A1" style:family="table-cell">
<style:table-cell-properties
style:vertical-align="bottom"
fo:background-color="#cccccc"
fo:padding-left="0.075in"
fo:padding-right="0.075in"
fo:padding-top="0in"
fo:padding-bottom="0in"
fo:border-left="0.0069in solid #000000"
fo:border-right="none"
fo:border-top="0.0069in solid #000000"
fo:border-bottom="0.0069in solid #000000"
style:writing-mode="lr-tb">
<style:background-image />
</style:table-cell-properties>
</style:style>
...
对输入文件的“content.xml”部分进行原始导出,然后在输出文件中进行原始导入确实将数据从一个文件传输到另一个文件。
#! /usr/local/bin/perl
use warnings;
use strict;
use OpenOffice::OODoc;
my $infile=$ARGV[0];
my $outfile='outfile.odt';
my $incontainer = odfContainer( $infile );
$incontainer->raw_export("content.xml");
my $outcontainer = odfContainer( $outfile, create => 'text' );
$outcontainer->raw_import("content.xml");
$outcontainer->save;
运行oodoc.pl infile.odt
,然后解压outfile.odt并检查content.xml确实显示样式已成功传输:
<style:style style:name="Table1" style:family="table">
<style:table-properties style:width="6.925in" table:align="margins" />
</style:style>
<style:style style:name="Table1.A" style:family="table-column">
<style:table-column-properties
style:column-width="2.3083in"
style:rel-column-width="21845*" />
</style:style>
<style:style style:name="Table1.A1" style:family="table-cell">
<style:table-cell-properties
fo:background-color="#cccccc"
fo:padding="0.0382in"
fo:border-left="0.0007in solid #000000"
fo:border-right="none"
fo:border-top="0.0007in solid #000000"
fo:border-bottom="0.0007in solid #000000">
<style:background-image />
</style:table-cell-properties>
</style:style>
现在这已经完成,我需要实际加载并使用 $outcontainer
中的单元格样式。
最佳答案
您进行了原始导入。该文档表示“还要记住,在保存之前,导入实际上并不是由 OODoc::File 执行的,因此导入的数据不会立即可用。”我建议您尝试 $container2->save;
,然后在导入样式后立即重新加载它,然后在下次保存后查看 Table.A1 是否显示在 doc2.odt 的 content.xml 中:
# load output file
my $container2 = odfContainer( $outfile, create => 'text' );
$container2->raw_import("styles.xml");
# Carry out the import and reload it with the new styles.
$container2->save;
$container2 = odfContainer( $outfile );
my $doc2 = odfDocument
(
container => $container2,
part => 'content'
);
# Load table from 'mytest.odt'
my $table=$doc->getTable(0);
# Get style from first cell in $table
my $headerstyle=$doc->getStyle( $doc->getCell($table, 0, 0) );
# Create table in $doc2
my $newtable=$doc2->appendTable('newtable', 1, 1, 'table-style' => $doc->getStyle($table) );
# Set style of first cell in $newtable to 'Table1.A1'
$doc2->cellStyle( $newtable, 0, 0, 'Table1.A1' );
# Write 'doc2.odt' to disk
$container2->save;
关于perl - 使用 OpenOffice::OODoc 传输表格样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671453/
我一直在做一些关于测量数据传输延迟的实验 CPU->GPU 和 GPU->CPU。我发现对于特定消息大小,CPU->GPU 数据传输速率几乎是 GPU->CPU 传输速率的两倍。谁能解释我为什么会这样
我将 ElasticSearch 用作我的 Post 模型的 Rails pet 项目应用程序的全文引擎。在我的 posts_controller.rb 索引操作中: def index
概述 流经网络的数据总是具有相同的类型:字节,这些字节如何传输主要取决于我们所说的网络传输。用户并不关心传输的细节,只在乎字节是否被可靠地发送和接收 如果使用 Java 网络编程,你会发现,某些时候当
我正在编写一些代码,以便将共享点从该页面转移到另一个页面: Server.Transfer("/DefectManagement/DefectList/default.aspx") 但是我遇到了这个问
我有这个泄漏,任何猜测?这个类有一些奇怪的引用。我的代码的任何地方都没有 contentobserver In com.example:1.5.0:27. com.example.ui.record
我听说过点对点内存传输并阅读了一些关于它的内容,但无法真正理解与标准 PCI-E 总线传输相比它的速度有多快。 我有一个使用多个 GPU 的 CUDA 应用程序,我可能对 P2P 传输感兴趣。我的问题
ftping 文件时,Transmit 中是否有忽略或过滤器列表?我希望它忽略上传 .svn 文件等。 最佳答案 是的。转到首选项并选择 Rules标签。在那里您可以定义要跳过哪些文件的规则。实际上,
我有以下片段来生成声音,在 while 循环中,我想动态更改它,以便它在声音生成期间创建不同频率的声音。 for(uint16_t i = 0; i < sample_N; i++) { da
我正在尝试使用 Delphi 2010 和 Indy 对 Web 服务进行概念验证。我此时的代码是: procedure TForm1.Log(const sEvent, sMsg: String);
我有一个 ActiveMQ JMS 代理,在端口 61616 上使用默认的 openwire TCP 传输公开。 我有许多远程客户端可以绑定(bind)到此代理来监听他们的消息。 如果我想打开 kee
reconnection strategies文档仅使用 JMS 示例,但是 FTP transport documentation确实说明了重新连接策略的使用,但没有任何细节或示例。 进一步,如果你
我有 2 个 TreeView,第一个填充有项目。 try { CheckBoxTreeItem treeRoot = new CheckBoxTreeItem("Root"); tr
在我为学校开发的一个网站上,用户输入他们的学校电子邮件和密码,如果他们已注册,则登录。如果没有,则会显示登录的第二部分,要求输入笔名称并确认密码。正因为如此,以及我复杂的业余 Django 编程,我有
我正在开发一个 Web 服务,我们在其中使用 LINQ-to-SQL 进行数据库抽象。当客户使用我们的网络服务时,对象被序列化为 XML,一切都很好。 现在我们希望开发我们自己的使用本地数据类型的客户
我应该创建一个名为“Backwards”的方法,该方法将列表从尾部横向到头部,但是当我运行代码时,它出现说(第 88 行)它找不到光标 = cusor.prev;象征。我需要在循环中再次设置上一个链接
给定像 Uint8Array 这样的类型化数组,似乎有两种方法可以通过 worker 传输它们。 选项 1 直接发送缓冲区并在接收端进行转换: 发件人:postMessage({fooBuffer:
在 PHP + jQuery 环境中,我和我的 friend 无法得出最佳解决方案。我们正在使用 Ajax 从数据库中获取数据。 解决方案 1 - Ajax 应该只传输数据,而不是 HTML 好处:我
大家好,非常感谢您的宝贵时间。 有一个 std::stringstream 需要传输到远程机器。网络库允许我用以下方法构建数据包: CreatePacket( const void * DATA, s
我正在使用 libcurl 通过 FTP 传输二进制文件 (.exe),并将其保存到本地文件。问题是文件传输后,它已被更改,不再是有效的 Win32 应用程序,因此无法运行。这是我的做法: CURL
各位程序员, 当我将它上传到我的 FTP 时,我的网站出现此错误:资源被解释为样式表,但使用 MIME 类型文本/纯文本传输 BlahBlahi
我是一名优秀的程序员,十分优秀!