Fix Issue1: Add insert_image() function

This commit is contained in:
Debao Zhang
2013-09-04 11:35:02 +08:00
parent 7f7fa7e9fa
commit b9dc02b79e
15 changed files with 692 additions and 12 deletions
+67 -5
View File
@@ -33,6 +33,7 @@
#include "xlsxstyles_p.h"
#include "xlsxrelationships_p.h"
#include "xlsxzipwriter_p.h"
#include "xlsxdrawing_p.h"
#include <QBuffer>
#include <QDebug>
@@ -93,11 +94,13 @@ bool Package::createPackage(const QString &packageName)
return false;
m_workbook->styles()->clearExtraFormatInfo(); //These info will be generated when write the worksheet data.
m_workbook->prepareDrawings();
writeWorksheetFiles(zipWriter);
// writeChartsheetFiles(zipWriter);
writeWorkbookFile(zipWriter);
// writeChartFiles(zipWriter);
// writeDrawingFiles(zipWriter);
writeDrawingFiles(zipWriter);
// writeVmlFiles(zipWriter);
// writeCommentFiles(zipWriter);
// writeTableFiles(zipWriter);
@@ -110,9 +113,10 @@ bool Package::createPackage(const QString &packageName)
writeThemeFile(zipWriter);
writeRootRelsFile(zipWriter);
writeWorkbookRelsFile(zipWriter);
writeWorksheetRelsFile(zipWriter);
writeWorksheetRelsFiles(zipWriter);
// writeChartsheetRelsFile(zipWriter);
// writeImageFiles(zipWriter);
writeDrawingRelsFiles(zipWriter);
writeImageFiles(zipWriter);
// writeVbaProjectFiles(zipWriter);
zipWriter.close();
@@ -144,6 +148,19 @@ void Package::writeWorkbookFile(ZipWriter &zipWriter)
zipWriter.addFile(QStringLiteral("xl/workbook.xml"), data);
}
void Package::writeDrawingFiles(ZipWriter &zipWriter)
{
for (int i=0; i<m_workbook->drawings().size(); ++i) {
Drawing *drawing = m_workbook->drawings()[i];
QByteArray data;
QBuffer buffer(&data);
buffer.open(QIODevice::WriteOnly);
drawing->saveToXmlFile(&buffer);
zipWriter.addFile(QStringLiteral("xl/drawings/drawing%1.xml").arg(i+1), data);
}
}
void Package::writeContentTypesFiles(ZipWriter &zipWriter)
{
ContentTypes content;
@@ -158,6 +175,15 @@ void Package::writeContentTypesFiles(ZipWriter &zipWriter)
}
}
int drawing_index = 1;
foreach (Drawing *drawing, m_workbook->drawings()) {
content.addDrawingName(QStringLiteral("drawing%1").arg(drawing_index));
drawing_index += 1;
}
if (!m_workbook->images().isEmpty())
content.addImageTypes(QStringList()<<QStringLiteral("png"));
if (m_workbook->sharedStrings()->count())
content.addSharedString();
@@ -283,7 +309,7 @@ void Package::writeWorkbookRelsFile(ZipWriter &zipWriter)
zipWriter.addFile(QStringLiteral("xl/_rels/workbook.xml.rels"), data);
}
void Package::writeWorksheetRelsFile(ZipWriter &zipWriter)
void Package::writeWorksheetRelsFiles(ZipWriter &zipWriter)
{
int index = 1;
foreach (Worksheet *sheet, m_workbook->worksheets()) {
@@ -293,7 +319,8 @@ void Package::writeWorksheetRelsFile(ZipWriter &zipWriter)
foreach (QString link, sheet->externUrlList())
rels.addWorksheetRelationship(QStringLiteral("/hyperlink"), link, QStringLiteral("External"));
foreach (QString link, sheet->externDrawingList())
rels.addWorksheetRelationship(QStringLiteral("/drawing"), link);
QByteArray data;
QBuffer buffer(&data);
buffer.open(QIODevice::WriteOnly);
@@ -302,4 +329,39 @@ void Package::writeWorksheetRelsFile(ZipWriter &zipWriter)
index += 1;
}
}
void Package::writeDrawingRelsFiles(ZipWriter &zipWriter)
{
int index = 1;
foreach (Worksheet *sheet, m_workbook->worksheets()) {
if (sheet->drawingLinks().size() == 0)
continue;
Relationships rels;
typedef QPair<QString, QString> PairType;
foreach (PairType pair, sheet->drawingLinks())
rels.addDocumentRelationship(pair.first, pair.second);
QByteArray data;
QBuffer buffer(&data);
buffer.open(QIODevice::WriteOnly);
rels.saveToXmlFile(&buffer);
zipWriter.addFile(QStringLiteral("xl/drawings/_rels/drawing%1.xml.rels").arg(index), data);
index += 1;
}
}
void Package::writeImageFiles(ZipWriter &zipWriter)
{
for (int i=0; i<m_workbook->images().size(); ++i) {
QImage image = m_workbook->images()[i];
QByteArray data;
QBuffer buffer(&data);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "png");
zipWriter.addFile(QStringLiteral("xl/media/image%1.png").arg(i+1), data);
}
}
} // namespace QXlsx