2012-09-29 73 views
5

Uso phpword para generar un documento de MS Word, ¿hay alguna forma de ayudarme a generar un índice al final del archivo generado?MS Word document file generate index

Creo que puede funcionar, es leer el archivo MS Word generado y ubicar dónde está cada palabra (por ejemplo, número de página en el archivo MS Word) y luego regenerar el índice en un archivo separado de MS Word.

¿Hay algún método mejor?
Ejemplo del archivo requerido:

A 
Animal 51,98 
Apple 11,54,99 

B 
Basket 55 
... 
.. 
etc 
+0

¿Qué tan grande es ese documento? ¿Con cuántos documentos tiene que trabajar? ¿Es esto solo un archivo para generar, o tienes que crear un sistema, que genere índices para su uso posterior también? – Kamil

+0

@Kamil solo un archivo de palabra, el primer archivo generado de aproximadamente 200 páginas. – shox

Respuesta

1

I supose se podía leer los encabezados del documento: Leer este post, no es exactamente lo que quiere, pero tal vez con modificaciones podría ser la manera correcta:

Automatically generate nested table of contents based on heading tags

+0

Los enlaces pueden [rot] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)! Proporcione una breve información sobre el enlace y luego agréguela como referencia –

1

creo que esto le ayudará a

See Here

+0

Enlaces [rot] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really -buenas-respuestas)! Proporcione una breve información sobre el enlace y luego agréguela como referencia –

+0

@Bhuvan Rikka ok gracias por su información ............ – Kichu

+0

@BhuvanRikka 웃, consulte esto 'http://stackoverflow.com/questions/15496461/usps-not-working-magento-1-7-ce' intenta encontrar una solución ....... – Kichu

1

Honestamente, shox, no creo que tengas muchas buenas opciones aquí. Lo analicé un poco, ya que también es interesante para mí, pero no pude encontrar nada en los documentos o foros de phpword además de sus publicaciones allí sobre cómo hacer esto posible. En la parte posterior de eso, puede probar para descomprimir el paquete docx (es un archivo zip) y manipular los archivos XML directamente. No tengo idea de cómo irá esto ... hipotéticamente, hecho bien, no es diferente de si se hizo en Word manualmente. Experimenté usando un texto de relleno y haciendo manualmente un "Marcar todo" para el índice en un término del documento. Lo que puedo encontrar es el siguiente:

añade que el primer hijo en ~/[Content_Types] .xml:

<Override PartName="/customXml/itemProps1.xml" ContentType="application/vnd.openxmlformats-officedocument.customXmlProperties+xml" /> 

crea la carpeta ~/CustomXML -

En la carpeta ~/CustomXML , crea item1.xml:

<b:Sources SelectedStyle="\APA.XSL" StyleName="APA" xmlns:b="http://schemas.openxmlformats.org/officeDocument/2006/bibliography" xmlns="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"></b:Sources> 

En la carpeta ~/CustomXML, crea itemProps1.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<ds:datastoreItem ds:itemID="{3DC430FE-7F6E-49D7-9EFC-E4F37E42ABA0}" xmlns:ds="http://schemas.openxmlformats.org/officeDocument/2006/customXml"> 
    <ds:schemaRefs> 
    <ds:schemaRef ds:uri="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"/> 
    </ds:schemaRefs> 
</ds:datastoreItem> 

crea la carpeta ~/CustomXML/_rels: En la carpeta ~/CustomXML/_rels, crea item1.xml.rels:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> 
    <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps" Target="itemProps1.xml"/> 
</Relationships> 

Los ~/docProps carpeta cambiado, pero es irrelevante, ya que regenera palabra/actualiza estos valores en cada apertura/cierre, y no tienen ninguna relación con el contenido del archivo.

Básicamente, esto deja la carpeta ~/word. Por lo tanto, los cambios ~/palabra/styles.xml para añadir al final un estilo para el índice, de la siguiente manera:

<w:style w:type="paragraph" w:styleId="Index1"> 
    <w:name w:val="index 1"/> 
    <w:basedOn w:val="Normal"/> 
    <w:next w:val="Normal"/> 
    <w:autoRedefine/> 
    <w:uiPriority w:val="99"/> 
    <w:semiHidden/> 
    <w:unhideWhenUsed/> 
    <w:rsid w:val="00C52B35"/> 
    <w:pPr> 
    <w:spacing w:after="0" w:line="240" w:lineRule="auto"/> 
    <w:ind w:left="220" w:hanging="220"/> 
    </w:pPr> 
</w:style> 

El w: Elementos rsid en ~/palabra/settings.xml todo cambió, y honestamente , estos están dispersos por todas partes y no estoy seguro de cómo funcionan/son calculados o si importan demasiado.

En ~/word/_rels/document.xml.REL, se añadió lo siguiente como un hijo del nodo Relaciones:

<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml" Target="../customXml/item1.xml"/> 

pasado y quizás lo más importante, en ~/palabra/document.xml, es seguido en cada caso, de mi mandato para la indexación ("sentarse") por los siguientes elementos:

<w:r w:rsidR="00C52B35"> 
    <w:fldChar w:fldCharType="begin"/> 
</w:r> 
<w:r w:rsidR="00C52B35"> 
    <w:instrText xml:space="preserve">XE "</w:instrText> 
</w:r> 
<w:r w:rsidR="00C52B35" w:rsidRPr="00C90937"> 
    <w:instrText>sit</w:instrText> 
</w:r> 
<w:r w:rsidR="00C52B35"> 
    <w:instrText xml:space="preserve">"</w:instrText> 
</w:r> 
<w:r w:rsidR="00C52B35"> 
    <w:fldChar w:fldCharType="end"/> 
</w:r> 

Hay también un poco en el extremo donde insertar el índice:

<w:p w:rsidR="00C52B35" w:rsidRDefault="00C52B35" w:rsidP="00DE5AB4"> 
    <w:pPr> 
    <w:rPr> 
     <w:b/> 
     <w:noProof/> 
    </w:rPr> 
    <w:sectPr w:rsidR="00C52B35" w:rsidSect="00C52B35"> 
     <w:pgSz w:w="12240" w:h="15840"/> 
     <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/> 
     <w:cols w:space="720"/> 
     <w:docGrid w:linePitch="360"/> 
    </w:sectPr> 
    </w:pPr> 
    <w:r> 
    <w:rPr> 
     <w:b/> 
    </w:rPr> 
    <w:fldChar w:fldCharType="begin"/> 
    </w:r> 
    <w:r> 
    <w:rPr> 
     <w:b/> 
    </w:rPr> 
    <w:instrText xml:space="preserve">INDEX \c "2" \z "1033"</w:instrText> 
    </w:r> 
    <w:r> 
    <w:rPr> 
     <w:b/> 
    </w:rPr> 
    <w:fldChar w:fldCharType="separate"/> 
    </w:r> 
</w:p> 
<w:p w:rsidR="00C52B35" w:rsidRDefault="00C52B35"> 
    <w:pPr> 
    <w:rPr> 
     <w:noProof/> 
    </w:rPr> 
    </w:pPr> 
    <w:r> 
    <w:rPr> 
     <w:noProof/> 
    </w:rPr> 
    <w:lastRenderedPageBreak/> 
    <w:br w:type="page"/> 
    </w:r> 
</w:p> 
<w:p w:rsidR="00C52B35" w:rsidRDefault="00C52B35"> 
    <w:pPr> 
    <w:pStyle w:val="Index1"/> 
    <w:tabs> 
     <w:tab w:val="right" w:leader="dot" w:pos="4310"/> 
    </w:tabs> 
    <w:rPr> 
     <w:noProof/> 
    </w:rPr> 
    </w:pPr> 
    <w:r> 
    <w:rPr> 
     <w:noProof/> 
    </w:rPr> 
    <w:lastRenderedPageBreak/> 
    <w:t>sit, 1, 2</w:t> 
    </w:r> 
</w:p> 
<w:p w:rsidR="00C52B35" w:rsidRDefault="00C52B35" w:rsidP="00DE5AB4"> 
    <w:pPr> 
    <w:rPr> 
     <w:b/> 
     <w:noProof/> 
    </w:rPr> 
    <w:sectPr w:rsidR="00C52B35" w:rsidSect="00C52B35"> 
     <w:type w:val="continuous"/> 
     <w:pgSz w:w="12240" w:h="15840"/> 
     <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/> 
     <w:cols w:num="2" w:space="720"/> 
     <w:docGrid w:linePitch="360"/> 
    </w:sectPr> 
    </w:pPr> 
</w:p> 
<w:p w:rsidR="00371DB1" w:rsidRPr="00371DB1" w:rsidRDefault="00C52B35" w:rsidP="00DE5AB4"> 
    <w:pPr> 
    <w:rPr> 
     <w:b/> 
    </w:rPr> 
    </w:pPr> 
    <w:r> 
    <w:rPr> 
     <w:b/> 
    </w:rPr> 
    <w:lastRenderedPageBreak/> 
    <w:fldChar w:fldCharType="end"/> 
    </w:r> 
</w:p> 

Esperemos que esto ayuda. Sé que es una solución compleja, pero es lo único que puedo encontrar que lo ayudará y realmente lo logrará de manera automatizada. Le gana un poco al the official, manual way of doing this, y debe mantener las características de un índice que usted hizo de esa manera. Lo recomendaría si lo hace en serio, usando WinMerge para ver las diferencias entre los archivos (haga clic con el botón derecho y utilice Compare Special> XML una vez que abra dos carpetas) y le deseo la mejor de las suertes. Sin embargo, si se trata de una oportunidad única, me limitaría a morder la bala y hacerlo manualmente. Probablemente sea más rápido y tenga menos dolores de cabeza.

Cuestiones relacionadas