You've already forked lazarus-ccr
fpspreadsheet: xlsx reader adds header/footer images to PageLayout.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8335 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -0,0 +1,72 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="12"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
<MainUnitHasTitleStatement Value="False"/>
|
||||||
|
<MainUnitHasScaledStatement Value="False"/>
|
||||||
|
<LRSInOutputDirectory Value="False"/>
|
||||||
|
<CompatibilityMode Value="True"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<Title Value="demo_read_headerfooter_images"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||||
|
</local>
|
||||||
|
<FormatVersion Value="2"/>
|
||||||
|
<Modes Count="1">
|
||||||
|
<Mode0 Name="default">
|
||||||
|
<local>
|
||||||
|
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||||
|
</local>
|
||||||
|
</Mode0>
|
||||||
|
</Modes>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="1">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="LazUtils"/>
|
||||||
|
</Item1>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="1">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="demo_read_headerfooter_images.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit0>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="demo_read_headerfooter_images"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="..\..\..\source"/>
|
||||||
|
<OtherUnitFiles Value="..\..\..\source\common"/>
|
||||||
|
<UnitOutputDirectory Value="..\..\lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<UseAnsiStrings Value="False"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<DebugInfoType Value="dsDwarf2Set"/>
|
||||||
|
<UseExternalDbgSyms Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
</Linking>
|
||||||
|
</CompilerOptions>
|
||||||
|
</CONFIG>
|
@ -0,0 +1,98 @@
|
|||||||
|
program demo_read_headerfooter_images;
|
||||||
|
|
||||||
|
{$mode delphi}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, fpstypes, fpspreadsheet, fpsallformats, fpsutils,
|
||||||
|
fpsImages, fpsPageLayout;
|
||||||
|
|
||||||
|
var
|
||||||
|
workbook: TsWorkbook;
|
||||||
|
worksheet: TsWorksheet;
|
||||||
|
i: Integer;
|
||||||
|
hfs: TsHeaderFooterSectionIndex;
|
||||||
|
img: TsEmbeddedObj;
|
||||||
|
|
||||||
|
const
|
||||||
|
FILE_NAME = 'hfimg';
|
||||||
|
|
||||||
|
function hfsToStr(idx: TsHeaderFooterSectionIndex): String;
|
||||||
|
begin
|
||||||
|
case idx of
|
||||||
|
hfsLeft: Result := 'left';
|
||||||
|
hfsCenter: Result := 'center';
|
||||||
|
hfsRight: Result := 'right';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Writeln('Starting program "demo_read_headerfooter_images"...');
|
||||||
|
WriteLn;
|
||||||
|
|
||||||
|
// Create the spreadsheet
|
||||||
|
workbook := TsWorkbook.Create;
|
||||||
|
try
|
||||||
|
workbook.ReadFromFile(FILE_NAME + '.xlsx', sfOOXML);
|
||||||
|
|
||||||
|
for i := 0 to workbook.GetWorksheetCount-1 do
|
||||||
|
begin
|
||||||
|
worksheet := workbook.GetWorksheetByIndex(i);
|
||||||
|
WriteLn('Worksheet "', worksheet.Name, '", PageLayout:');
|
||||||
|
WriteLn(' HeaderMargin: ', worksheet.Pagelayout.HeaderMargin:6:1, ' mm');
|
||||||
|
WriteLn(' TopMargin : ', worksheet.Pagelayout.TopMargin:6:1, ' mm');
|
||||||
|
WriteLn(' Headers:');
|
||||||
|
WriteLn(' first page: ', worksheet.PageLayout.Headers[0]);
|
||||||
|
WriteLn(' odd or all pages: ', worksheet.PageLayout.Headers[1]);
|
||||||
|
WriteLn(' even pages:', worksheet.PageLayout.Headers[2]);
|
||||||
|
for hfs in TsHeaderFooterSectionIndex do
|
||||||
|
begin
|
||||||
|
Write(' Images ', hfsToStr(hfs), ': ');
|
||||||
|
if worksheet.PageLayout.HeaderImages[hfs].Index = -1 then
|
||||||
|
WriteLn('(none)')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
img := workbook.GetEmbeddedObj(worksheet.PageLayout.HeaderImages[hfs].Index);
|
||||||
|
if img = nil then
|
||||||
|
WriteLn('image not found')
|
||||||
|
else
|
||||||
|
WriteLn(img.FileName);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
WriteLn(' Footers:');
|
||||||
|
WriteLn(' first page: ', worksheet.PageLayout.Footers[0]);
|
||||||
|
WriteLn(' odd or all pages: ', worksheet.PageLayout.Footers[1]);
|
||||||
|
WriteLn(' even pages: ', worksheet.PageLayout.Footers[2]);
|
||||||
|
for hfs in TsHeaderFooterSectionIndex do
|
||||||
|
begin
|
||||||
|
Write (' Images ', hfsToStr(hfs), ': ');
|
||||||
|
if worksheet.PageLayout.FooterImages[hfs].Index = -1 then
|
||||||
|
WriteLn('(none)')
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
img := workbook.GetEmbeddedObj(worksheet.PageLayout.FooterImages[hfs].Index);
|
||||||
|
if img = nil then
|
||||||
|
WriteLn('image not found')
|
||||||
|
else
|
||||||
|
WriteLn(img.FileName);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
WriteLn;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if workbook.ErrorMsg <> '' then
|
||||||
|
WriteLn(workbook.ErrorMsg);
|
||||||
|
|
||||||
|
WriteLn('Finished.');
|
||||||
|
if ParamCount = 0 then
|
||||||
|
begin
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
|
WriteLn('Press [ENTER] to close this program...');
|
||||||
|
ReadLn;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
finally
|
||||||
|
workbook.Free;
|
||||||
|
end;
|
||||||
|
end.
|
||||||
|
|
@ -402,7 +402,7 @@ type
|
|||||||
FromRow, FromCol, ToRow, ToCol: Cardinal;
|
FromRow, FromCol, ToRow, ToCol: Cardinal;
|
||||||
FromRowOffs, FromColOffs, ToRowOffs, ToColOffs: Double;
|
FromRowOffs, FromColOffs, ToRowOffs, ToColOffs: Double;
|
||||||
// This part is for header/footer images.
|
// This part is for header/footer images.
|
||||||
// ... to be completed ...
|
HFImgPosition: string; // 'LH', 'CH', 'RH', 'LF', 'CF', 'RF';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
THyperlinkListData = class
|
THyperlinkListData = class
|
||||||
@ -2662,6 +2662,7 @@ var
|
|||||||
w, h: Double;
|
w, h: Double;
|
||||||
img: TsEmbeddedObj;
|
img: TsEmbeddedObj;
|
||||||
scaleX, scaleY: Double;
|
scaleX, scaleY: Double;
|
||||||
|
pageIdx: Integer;
|
||||||
begin
|
begin
|
||||||
doc := nil;
|
doc := nil;
|
||||||
j := 1;
|
j := 1;
|
||||||
@ -2719,7 +2720,24 @@ begin
|
|||||||
img := TsWorkbook(FWorkbook).GetEmbeddedObj(data.ImgIndex);
|
img := TsWorkbook(FWorkbook).GetEmbeddedObj(data.ImgIndex);
|
||||||
if data.IsHeaderFooter then
|
if data.IsHeaderFooter then
|
||||||
begin
|
begin
|
||||||
// to do: add header/footer processing here.
|
if data.HFImgPosition <> '' then
|
||||||
|
begin
|
||||||
|
pageIdx := HEADER_FOOTER_INDEX_ALL; // wp: Don't know which is the correct index...
|
||||||
|
case data.HFImgPosition[2] of
|
||||||
|
'H':
|
||||||
|
case data.HFImgPosition[1] of
|
||||||
|
'L': sheet.PageLayout.AddHeaderImage(pageIdx, hfsLeft, data.ImgIndex);
|
||||||
|
'C': sheet.PageLayout.AddHeaderImage(pageIdx, hfsCenter, data.ImgIndex);
|
||||||
|
'R': sheet.PageLayout.AddHeaderImage(pageIdx, hfsRight, data.ImgIndex);
|
||||||
|
end;
|
||||||
|
'F':
|
||||||
|
case data.HFImgPosition[1] of
|
||||||
|
'L': sheet.PageLayout.AddFooterImage(pageIdx, hfsLeft, data.ImgIndex);
|
||||||
|
'C': sheet.PageLayout.AddFooterImage(pageIdx, hfsCenter, data.ImgIndex);
|
||||||
|
'R': sheet.PageLayout.AddFooterImage(pageIdx, hfsRight, data.ImgIndex);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
w := -data.FromColOffs + data.ToColOffs;
|
w := -data.FromColOffs + data.ToColOffs;
|
||||||
@ -4030,13 +4048,18 @@ var
|
|||||||
relID: String;
|
relID: String;
|
||||||
title: String;
|
title: String;
|
||||||
data: TEmbeddedObjData;
|
data: TEmbeddedObjData;
|
||||||
|
id: String;
|
||||||
begin
|
begin
|
||||||
ANode := ANode.FirstChild;
|
ANode := ANode.FirstChild;
|
||||||
while Assigned(ANode) do
|
while Assigned(ANode) do
|
||||||
begin
|
begin
|
||||||
|
id := '';
|
||||||
|
relID := '';
|
||||||
|
title := '';
|
||||||
nodeName := ANode.NodeName;
|
nodeName := ANode.NodeName;
|
||||||
if nodeName = 'v:shape' then
|
if nodeName = 'v:shape' then
|
||||||
begin
|
begin
|
||||||
|
id := GetAttrValue(ANode, 'id');
|
||||||
node := ANode.FirstChild;
|
node := ANode.FirstChild;
|
||||||
while Assigned(node) do
|
while Assigned(node) do
|
||||||
begin
|
begin
|
||||||
@ -4065,6 +4088,7 @@ begin
|
|||||||
data.ImgIndex := -1;
|
data.ImgIndex := -1;
|
||||||
data.Worksheet := AWorksheet;
|
data.Worksheet := AWorksheet;
|
||||||
data.IsHeaderFooter := true;
|
data.IsHeaderFooter := true;
|
||||||
|
data.HFImgPosition := id;
|
||||||
FEmbeddedObjList.Add(data);
|
FEmbeddedObjList.Add(data);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Reference in New Issue
Block a user