8
9
10
11
12
13
14
15
16
17
18
19
20
21
23#include "fxbarcode/oned/BC_OnedEAN8Writer.h"
32#include "core/fxcrt/fx_extension.h"
33#include "core/fxge/cfx_defaultrenderdevice.h"
34#include "core/fxge/text_char_pos.h"
35#include "fxbarcode/BC_Writer.h"
36#include "fxbarcode/oned/BC_OneDimWriter.h"
37#include "fxbarcode/oned/BC_OnedEANChecksum.h"
41const uint8_t kOnedEAN8StartPattern[3] = {1, 1, 1};
42const uint8_t kOnedEAN8MiddlePattern[5] = {1, 1, 1, 1, 1};
44using LPatternRow =
std::array<uint8_t, 4>;
45constexpr std::array<
const LPatternRow, 10> kOnedEAN8LPatternTable = {
76 std::all_of(contents.begin(), contents.end(),
82 filtercontents.Reserve(contents.GetLength());
84 for (size_t i = 0; i < contents.GetLength(); i++) {
93 return filtercontents;
101 if (contents.GetLength() != 8)
104 DataVector<uint8_t> result(m_codeWidth);
105 auto result_span = pdfium::make_span(result);
106 result_span = AppendPattern(result_span, kOnedEAN8StartPattern,
true);
108 for (
int i = 0; i <= 3; i++) {
109 int32_t digit = FXSYS_DecimalCharToInt(contents[i]);
111 AppendPattern(result_span, kOnedEAN8LPatternTable[digit],
false);
113 result_span = AppendPattern(result_span, kOnedEAN8MiddlePattern,
false);
115 for (
int i = 4; i <= 7; i++) {
116 int32_t digit = FXSYS_DecimalCharToInt(contents[i]);
118 AppendPattern(result_span, kOnedEAN8LPatternTable[digit],
true);
120 AppendPattern(result_span, kOnedEAN8StartPattern,
true);
131 constexpr float kLeftPosition = 3.0f;
133 size_t iLength = str.GetLength();
134 std::vector<TextCharPos> charpos(iLength);
136 size_t iLen = tempStr.GetLength();
137 constexpr int32_t kWidth = 28;
140 int32_t iFontSize =
static_cast<int32_t>(fabs(
m_fFontSize));
141 int32_t iTextHeight = iFontSize + 1;
145 kLeftPosition + kWidth - 0.5
, (
float)
m_Height);
151 kLeftPosition + 33 + kWidth - 0.5
, (
float)
m_Height);
157 pdfium::span<TextCharPos> charpos_span =
pdfium::make_span(charpos);
158 CalcTextInfo(tempStr, charpos, m_pFont, (
float)strWidth, iFontSize, blank);
162 (
float)(
m_Height - iTextHeight + iFontSize)
);
164 device->DrawNormalText(charpos_span.first(iLen), m_pFont,
165 static_cast<
float>(iFontSize), affine_matrix1,
166 m_fontColor, GetTextRenderOptions());
168 tempStr = str.Substr(4, 4);
169 iLen = tempStr.GetLength();
170 CalcTextInfo(tempStr, charpos_span.subspan(4), m_pFont, (
float)strWidth,
175 (
float)(
m_Height - iTextHeight + iFontSize)
);
177 device->DrawNormalText(charpos_span.subspan(4, iLen), m_pFont,
178 static_cast<
float>(iFontSize), affine_matrix1,
179 m_fontColor, GetTextRenderOptions());
int32_t EANCalcChecksum(const ByteString &contents)
fxcrt::ByteString ByteString
static bool HasValidContentSize(WideStringView contents)
int32_t CalcChecksum(const ByteString &contents) override
bool ShowChars(WideStringView contents, CFX_RenderDevice *device, const CFX_Matrix &matrix, int32_t barWidth) override
~CBC_OnedEAN8Writer() override
bool CheckContentValidity(WideStringView contents) override
void SetTextLocation(BC_TEXT_LOC location) override
void SetDataLength(int32_t length) override
WideString FilterContents(WideStringView contents) override
DataVector< uint8_t > Encode(const ByteString &contents) override
static const FX_ARGB kBackgroundColor
constexpr CFX_FloatRect(float l, float b, float r, float t)
FX_RECT GetOuterRect() const
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
constexpr CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
void Concat(const CFX_Matrix &right)
bool FillRect(const FX_RECT &rect, uint32_t color)
WideString & operator+=(wchar_t ch)
bool FXSYS_IsDecimalDigit(wchar_t c)
fxcrt::WideStringView WideStringView
FX_RECT & operator=(const FX_RECT &that)=default
fxcrt::WideString WideString