图像上忽略了DPI设置

时间:2014-10-30 18:03:27

标签: openxml docx

我有一个.docx文档,我一直在使用OpenXML进行处理。我所做的任务之一是通过在原始文档中查找它的大小来替换和成像,并生成一个 正确大小的新文档。但是,在某些情况下并非如此。似乎这个词想要忽略我的DPI设置,我无法弄清楚为什么。

例如,查看XML,我有一个图像:

<wp:extent cx="4572000" cy="2971800" />

将EMU转换为具有我想要的300 DPI的像素,这应该给出975 x 1500像素(2971800 * 300 / 914400 = 9754572000 * 300 / 914400 = 1500)的尺寸。所以我生成了我的图像并将其推入文档而不是原始图像。文档中的图片应为3.25" x 5"但是,当我加载生成的文档并查看单词中的“大小和位置”时,它声称图片的原始大小为10.16" x 15.62"并在两个维度缩小为32%。文档中的打包图像确实是我想要的975 x 1500,但似乎Word正在将其视为96 dpi(975/10.16 = 96)。所以我的问题是,为什么要这样做,我该如何阻止呢?我已经在BlipFill上明确设置了DPI,但它似乎被忽略了。

以下是XML文档中的整体内容:

<w:drawing xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="1D5F6FCE" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
    <wp:extent cx="4572000" cy="2971800" />
    <wp:effectExtent l="0" t="0" r="0" b="0" />
    <wp:docPr id="2" name="Picture 2" title="work" />
    <wp:cNvGraphicFramePr>
      <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1" />
    </wp:cNvGraphicFramePr>
    <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
      <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
        <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
          <pic:nvPicPr>
            <pic:cNvPr id="0" name="Picture 2" />
            <pic:cNvPicPr>
              <a:picLocks noChangeAspect="1" noChangeArrowheads="1" />
            </pic:cNvPicPr>
          </pic:nvPicPr>
          <pic:blipFill dpi="300">
            <a:blip r:embed="rId13" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
              <a:extLst>
                <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
                  <a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0" />
                </a:ext>
              </a:extLst>
            </a:blip>
            <a:srcRect />
            <a:stretch>
              <a:fillRect />
            </a:stretch>
          </pic:blipFill>
          <pic:spPr bwMode="auto">
            <a:xfrm>
              <a:off x="0" y="0" />
              <a:ext cx="4572000" cy="2971800" />
            </a:xfrm>
            <a:prstGeom prst="rect">
              <a:avLst />
            </a:prstGeom>
            <a:noFill />
          </pic:spPr>
        </pic:pic>
      </a:graphicData>
    </a:graphic>
  </wp:inline>
</w:drawing>

1 个答案:

答案 0 :(得分:2)

要生成所需的原始大小值,我相信您需要将图像二进制文件中的DPI值设置为300 dpi。

您提到的dpi上的<pic:blipFill>属性似乎仅在打印过程中被Word使用,或者如果图像二进制文件没有DPI值。在任何情况下,它都不用于计算文档中的图像显示大小。如果在那里录制的话,Word很可能更喜欢存储在图像本身中的dpi值。这可能值得用图像查看器或其他任何方法来检查。通常,图像dpi默认为72dpi。 96是Windows下的系统'screen'dpi,这让我怀疑是嵌入在图像二进制文件中的dpi,特别是如果它是由Windows应用程序生成的。

为了使图像在文档中以正确的大小显示,它是您想要的cx和cy值。如果您将<wp:extent/>中的那些设置为您想要的大小,那么这应该是屏幕显示的技巧。但是你还需要更改图片中的图片:spPr / a:xfrm / a:ext如果你想要它也以正确的尺寸打印出来。

从您的问题中听起来它实际上显示的大小合适,只是在Word对话框中报告的原始大小不是预期值。我希望如果您获得图像中设置的实际图像dpi值,您将看到您所追求的行为。