2012-09-29 41 views
5

Tôi sử dụng phpword để tạo tài liệu MS Word, có cách nào giúp tôi tạo chỉ mục ở cuối tệp được tạo không?Tệp tài liệu MS Word tạo chỉ mục

một cách tôi nghĩ có thể hoạt động, là đọc tệp MS Word được tạo và xác định vị trí của mỗi từ (ví dụ: số trang trong tệp MS Word) và sau đó tạo lại chỉ mục trong tệp MS Word riêng biệt.

Có phương pháp nào tốt hơn không?
Ví dụ về các tập tin cần thiết:

A 
Animal 51,98 
Apple 11,54,99 

B 
Basket 55 
... 
.. 
etc 
+0

Tài liệu đó lớn đến mức nào? Bạn phải làm việc với bao nhiêu tài liệu? Đây có phải chỉ là một tệp để tạo hoặc bạn phải tạo hệ thống, tạo ra các chỉ mục để sử dụng sau này không? – Kamil

+0

@Kamil chỉ một tệp về, tệp được tạo đầu tiên khoảng 200 trang. – shox

Trả lời

1

Tôi giả sử bạn có thể đọc các tiêu đề của tài liệu: Đọc bài này, không phải là chính xác những gì bạn muốn nhưng có lẽ với những thay đổi có thể là cách chính xác:

Automatically generate nested table of contents based on heading tags

+0

Liên kết có thể [thối] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)! Cung cấp thông tin ngắn gọn về liên kết và sau đó thêm thông tin đó làm tham chiếu –

1

tôi nghĩ rằng điều này sẽ giúp bạn

See Here

+0

Liên kết có thể [thối] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really -câu trả lời tốt)! Cung cấp thông tin ngắn gọn về liên kết và sau đó thêm thông tin đó làm tài liệu tham khảo –

+0

@Bhuvan Rikka ok thankz cho thông tin của bạn ............ – Kichu

+0

@BhuvanRikka 웃, tham khảo 'http://stackoverflow.com này/câu hỏi/15496461/usps-not-working-magento-1-7-ce' cố gắng tìm một giải pháp ....... – Kichu

1

Thành thật mà nói, shox, tôi không nghĩ rằng bạn có rất nhiều lựa chọn tốt ở đây. Tôi nhìn vào điều này một chút vì nó cũng thú vị với tôi, nhưng tôi không thể tìm thấy gì trong các tài liệu hoặc diễn đàn của phpword bên cạnh bài viết của bạn ở đó về cách làm điều này có thể. Ở mặt sau, bạn có thể thử để giải nén gói docx (đó là tệp zip) và thao tác trực tiếp các tệp XML. Tôi không có ý tưởng làm thế nào điều này sẽ đi ... giả thuyết, được thực hiện đúng, nó không có gì khác hơn nếu nó được thực hiện trong Word bằng tay. Tôi đã thử nghiệm bằng cách sử dụng một số văn bản phụ và thực hiện thủ công "Đánh dấu tất cả" cho chỉ mục trên một cụm từ trong tài liệu. Những gì tôi có thể tìm thấy như sau:

Thêm như đứa trẻ đầu tiên trong ~/[Content_Types] .xml:

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

Tạo thư mục ~/CustomXml -

Trong thư mục ~/CustomXml , tạo 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> 

Trong thư mục ~/CustomXml, tạo 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> 

Tạo thư mục ~/CustomXml/_rels: Trong/_rels thư mục ~/CustomXml, tạo 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> 

Các ~/docProps folder thay đổi, nhưng nó không liên quan như regenerates từ/cập nhật các giá trị này trên mỗi lần mở/đóng và chúng không có bất kỳ nội dung nào của tệp.

Về cơ bản, lá thư mục ~/word. Vì vậy, ~/từ/styles.xml thay đổi để thêm ở cuối một phong cách cho các chỉ số như sau:

<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> 

Các w: yếu tố rsid trong ~/từ/settings.xml tất cả đã thay đổi, và trung thực , chúng nằm rải rác khắp nơi và tôi không chắc chúng hoạt động như thế nào/được tính toán hay chúng quan trọng quá nhiều.

Trong ~/word/_rels/document.xml.rels, sau đây đã được bổ sung như một đứa trẻ của nút mối quan hệ:

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

cuối và có lẽ quan trọng nhất, trong ~/từ/document.xml, mỗi lần xuất hiện của thuật ngữ của tôi cho chỉ mục ("ngồi") được theo sau bởi các yếu tố sau:

<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> 

Ngoài ra còn có một chút ở cuối nơi tôi chèn các chỉ số:

<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> 

Hy vọng điều này giúp. Tôi biết đó là một giải pháp phức tạp, nhưng đó là điều duy nhất tôi có thể tìm thấy sẽ giúp bạn và thực sự thực hiện điều này một cách tự động. Nó đánh bại the official, manual way of doing this một chút, và nên giữ các tính năng của một chỉ mục mà bạn đã làm theo cách đó. Tôi muốn giới thiệu nếu bạn nghiêm túc làm điều này, sử dụng WinMerge để xem sự khác biệt giữa các tệp (nhấp chuột phải và sử dụng So sánh Đặc biệt> XML khi bạn mở hai thư mục) và chúc bạn may mắn nhất. Nếu đó là một lần mặc dù, tôi chỉ cần cắn viên đạn và làm điều đó bằng tay. Nó có thể nhanh hơn và ít đau đầu hơn.

Các vấn đề liên quan